From 9cde9ecb9a9cfe704448f1039f58e434690f069f Mon Sep 17 00:00:00 2001 From: agoransson Date: Sat, 31 Mar 2012 13:03:22 +0200 Subject: [PATCH 01/26] Added a new example parsing HTTP header. Removed the requirement for exception handling in HTTP.java. Signed-off-by: agoransson --- .../download/json4processing-0.1.3.zip | Bin 0 -> 167493 bytes .../create_jsonarray/create_jsonarray.pde | 23 + .../create_jsonarray_of_objects.pde | 31 + .../create_jsonobject/create_jsonobject.pde | 22 + .../create_jsonobject_from_httpheader.pde | 57 + .../create_jsonobject_from_string.pde | 20 + .../reading_yahoo_weather.pde | 37 + distribution/json4processing-0.1.3/index.html | 132 ++ .../reference/allclasses-frame.html | 59 + .../reference/allclasses-noframe.html | 59 + .../reference/constant-values.html | 170 ++ .../reference/deprecated-list.html | 142 ++ .../reference/help-doc.html | 209 ++ .../reference/index-all.html | 899 ++++++++ .../reference/index.html | 36 + .../reference/org/json/CDL.html | 500 +++++ .../reference/org/json/Cookie.html | 357 ++++ .../reference/org/json/CookieList.html | 297 +++ .../reference/org/json/HTTP.html | 363 ++++ .../reference/org/json/HTTPTokener.html | 277 +++ .../reference/org/json/JSONArray.html | 1463 +++++++++++++ .../reference/org/json/JSONException.html | 291 +++ .../reference/org/json/JSONML.html | 422 ++++ .../reference/org/json/JSONObject.html | 1847 +++++++++++++++++ .../reference/org/json/JSONString.html | 216 ++ .../reference/org/json/JSONStringer.html | 303 +++ .../reference/org/json/JSONTokener.html | 667 ++++++ .../reference/org/json/JSONWriter.html | 506 +++++ .../reference/org/json/XML.html | 607 ++++++ .../reference/org/json/XMLTokener.html | 452 ++++ .../reference/org/json/package-frame.html | 78 + .../reference/org/json/package-summary.html | 239 +++ .../reference/org/json/package-tree.html | 160 ++ .../reference/overview-tree.html | 162 ++ .../reference/package-list | 1 + .../reference/resources/inherit.gif | Bin 0 -> 57 bytes .../reference/serialized-form.html | 178 ++ .../reference/stylesheet.css | 310 +++ .../json4processing-0.1.3/stylesheet.css | 203 ++ .../create_jsonobject_from_httpheader.pde | 57 + resources/build.properties | 2 +- src/org/json/HTTP.java | 81 +- 42 files changed, 11899 insertions(+), 36 deletions(-) create mode 100644 distribution/json4processing-0.1.3/download/json4processing-0.1.3.zip create mode 100644 distribution/json4processing-0.1.3/examples/create_jsonarray/create_jsonarray.pde create mode 100644 distribution/json4processing-0.1.3/examples/create_jsonarray_of_objects/create_jsonarray_of_objects.pde create mode 100644 distribution/json4processing-0.1.3/examples/create_jsonobject/create_jsonobject.pde create mode 100644 distribution/json4processing-0.1.3/examples/create_jsonobject_from_httpheader/create_jsonobject_from_httpheader.pde create mode 100644 distribution/json4processing-0.1.3/examples/create_jsonobject_from_string/create_jsonobject_from_string.pde create mode 100644 distribution/json4processing-0.1.3/examples/reading_yahoo_weather/reading_yahoo_weather.pde create mode 100644 distribution/json4processing-0.1.3/index.html create mode 100644 distribution/json4processing-0.1.3/reference/allclasses-frame.html create mode 100644 distribution/json4processing-0.1.3/reference/allclasses-noframe.html create mode 100644 distribution/json4processing-0.1.3/reference/constant-values.html create mode 100644 distribution/json4processing-0.1.3/reference/deprecated-list.html create mode 100644 distribution/json4processing-0.1.3/reference/help-doc.html create mode 100644 distribution/json4processing-0.1.3/reference/index-all.html create mode 100644 distribution/json4processing-0.1.3/reference/index.html create mode 100644 distribution/json4processing-0.1.3/reference/org/json/CDL.html create mode 100644 distribution/json4processing-0.1.3/reference/org/json/Cookie.html create mode 100644 distribution/json4processing-0.1.3/reference/org/json/CookieList.html create mode 100644 distribution/json4processing-0.1.3/reference/org/json/HTTP.html create mode 100644 distribution/json4processing-0.1.3/reference/org/json/HTTPTokener.html create mode 100644 distribution/json4processing-0.1.3/reference/org/json/JSONArray.html create mode 100644 distribution/json4processing-0.1.3/reference/org/json/JSONException.html create mode 100644 distribution/json4processing-0.1.3/reference/org/json/JSONML.html create mode 100644 distribution/json4processing-0.1.3/reference/org/json/JSONObject.html create mode 100644 distribution/json4processing-0.1.3/reference/org/json/JSONString.html create mode 100644 distribution/json4processing-0.1.3/reference/org/json/JSONStringer.html create mode 100644 distribution/json4processing-0.1.3/reference/org/json/JSONTokener.html create mode 100644 distribution/json4processing-0.1.3/reference/org/json/JSONWriter.html create mode 100644 distribution/json4processing-0.1.3/reference/org/json/XML.html create mode 100644 distribution/json4processing-0.1.3/reference/org/json/XMLTokener.html create mode 100644 distribution/json4processing-0.1.3/reference/org/json/package-frame.html create mode 100644 distribution/json4processing-0.1.3/reference/org/json/package-summary.html create mode 100644 distribution/json4processing-0.1.3/reference/org/json/package-tree.html create mode 100644 distribution/json4processing-0.1.3/reference/overview-tree.html create mode 100644 distribution/json4processing-0.1.3/reference/package-list create mode 100644 distribution/json4processing-0.1.3/reference/resources/inherit.gif create mode 100644 distribution/json4processing-0.1.3/reference/serialized-form.html create mode 100644 distribution/json4processing-0.1.3/reference/stylesheet.css create mode 100644 distribution/json4processing-0.1.3/stylesheet.css create mode 100644 examples/create_jsonobject_from_httpheader/create_jsonobject_from_httpheader.pde diff --git a/distribution/json4processing-0.1.3/download/json4processing-0.1.3.zip b/distribution/json4processing-0.1.3/download/json4processing-0.1.3.zip new file mode 100644 index 0000000000000000000000000000000000000000..4ac13a2d9a0dc73120b0fdd44469e8862e15334b GIT binary patch literal 167493 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 literal 0 HcmV?d00001 diff --git a/distribution/json4processing-0.1.3/examples/create_jsonarray/create_jsonarray.pde b/distribution/json4processing-0.1.3/examples/create_jsonarray/create_jsonarray.pde new file mode 100644 index 000000000..93bd2c04f --- /dev/null +++ b/distribution/json4processing-0.1.3/examples/create_jsonarray/create_jsonarray.pde @@ -0,0 +1,23 @@ +/* + * JSON 4 Processing + * Basic example 2: Creating a JSON Array + * + * Good for sending a large set of primitive values, like sensor readings. + */ + +import org.json.*; + +void setup(){ + + // 1. Initialize the Array + JSONArray myJsonArray = new JSONArray(); + + // 2. Add some content to the array + myJsonArray.put( 4 ); + myJsonArray.put( 2 ); + + println( myJsonArray ); +} + +void draw(){ +} diff --git a/distribution/json4processing-0.1.3/examples/create_jsonarray_of_objects/create_jsonarray_of_objects.pde b/distribution/json4processing-0.1.3/examples/create_jsonarray_of_objects/create_jsonarray_of_objects.pde new file mode 100644 index 000000000..4d6567c5e --- /dev/null +++ b/distribution/json4processing-0.1.3/examples/create_jsonarray_of_objects/create_jsonarray_of_objects.pde @@ -0,0 +1,31 @@ +/* + * JSON 4 Processing + * Basic example 3: Creating a JSON Array of JSON Objects. + * + * Good for sending multiple complex values, such as database tables. + */ + +import org.json.*; + +void setup(){ + + // 1. Initialize the Array + JSONArray myJsonUsers = new JSONArray(); + + // 2. Create the first object & add to array + JSONObject firstUser = new JSONObject(); + firstUser.put( "name", "Andreas" ); + firstUser.put( "age", 32 ); + myJsonUsers.put( firstUser ); + + // 3. Create the second object + JSONObject secondUser = new JSONObject(); + secondUser.put( "name", "Maria" ); + secondUser.put( "age", 28 ); + myJsonUsers.put( secondUser ); + + println( myJsonUsers ); +} + +void draw(){ +} diff --git a/distribution/json4processing-0.1.3/examples/create_jsonobject/create_jsonobject.pde b/distribution/json4processing-0.1.3/examples/create_jsonobject/create_jsonobject.pde new file mode 100644 index 000000000..ba13b64f3 --- /dev/null +++ b/distribution/json4processing-0.1.3/examples/create_jsonobject/create_jsonobject.pde @@ -0,0 +1,22 @@ +/* + * JSON 4 Processing + * Basic example 1: Creating a JSON Object + * + * Good for sending values that has a specific meaning (complex values) + */ + +import org.json.*; + +void setup(){ + + // 1. Initialize the object + JSONObject myJsonObject = new JSONObject(); + + // 2. Add some content to the object + myJsonObject.put( "myIntegerValue", 7 ); + + println( myJsonObject ); +} + +void draw(){ +} diff --git a/distribution/json4processing-0.1.3/examples/create_jsonobject_from_httpheader/create_jsonobject_from_httpheader.pde b/distribution/json4processing-0.1.3/examples/create_jsonobject_from_httpheader/create_jsonobject_from_httpheader.pde new file mode 100644 index 000000000..32041620c --- /dev/null +++ b/distribution/json4processing-0.1.3/examples/create_jsonobject_from_httpheader/create_jsonobject_from_httpheader.pde @@ -0,0 +1,57 @@ +/* + * JSON 4 Processing + * Basic example 5: Parsing the HTTP header from www.processing.org + * + * This example creates a JSONObject from the HTTP response when + * contacting a website (www.processing.org). + */ +import org.json.*; +import java.net.URL; +import java.net.URLConnection; + +URL url; +URLConnection conn; + +void setup() { + // Unfortunately there's a problem in the Processing Client implementation + // that forces us to use straight Java. + try { + url = new URL("http://www.processing.org"); + conn = url.openConnection(); + } + catch( Exception e) { + } + + // We will manually add the entire HTTP reponse to this StringBuffer + // and create the JSONObject using it. + StringBuffer sb = new StringBuffer(); + + // Construct the String object using the URLConnection. + for (int i = 0;; i++) { + String name = conn.getHeaderFieldKey(i); + String value = conn.getHeaderField(i); + if (name == null && value == null) { + break; + } + if (name == null) { + // Add the value, if there is no key-value pair. + sb.append(value).append("\n"); + } + else { + // Add the key-value pair. + sb.append(name).append(":").append(value).append("\n"); + } + } + + // Create the JSON HTTP instance + HTTP http = new HTTP(); + + // Create the JSONObject using the HTTP instance + JSONObject obj = http.toJSONObject(sb.toString()); + + // Print the JSONObject + System.out.println(obj); +} +void draw() { +} + diff --git a/distribution/json4processing-0.1.3/examples/create_jsonobject_from_string/create_jsonobject_from_string.pde b/distribution/json4processing-0.1.3/examples/create_jsonobject_from_string/create_jsonobject_from_string.pde new file mode 100644 index 000000000..a47352f0a --- /dev/null +++ b/distribution/json4processing-0.1.3/examples/create_jsonobject_from_string/create_jsonobject_from_string.pde @@ -0,0 +1,20 @@ +/* + * JSON 4 Processing + * Basic example 1: Creating a JSON Object from a json string + */ + +import org.json.*; + +void setup(){ + + // 1. Get the json-string (we'll just create one...) + String jsonstring = "{\"myIntegerValue\":7}"; + + // 2. Initialize the object + JSONObject myJsonObject = new JSONObject(jsonstring); + + println( myJsonObject ); +} + +void draw(){ +} \ No newline at end of file diff --git a/distribution/json4processing-0.1.3/examples/reading_yahoo_weather/reading_yahoo_weather.pde b/distribution/json4processing-0.1.3/examples/reading_yahoo_weather/reading_yahoo_weather.pde new file mode 100644 index 000000000..89e79d26f --- /dev/null +++ b/distribution/json4processing-0.1.3/examples/reading_yahoo_weather/reading_yahoo_weather.pde @@ -0,0 +1,37 @@ +/* + * JSON 4 Processing + * Basic example 4: Reading data from the web (Yahoo weather) + * + * This example reads the Weather feed from the Yahoo API's. It's using + * the WOEID for Malmo, you can change this by finding the ID you want + * at http://developer.yahoo.com/weather/ + */ + +import org.json.*; + +void setup() { + // Accessing the weather service + String BASE_URL = "http://weather.yahooapis.com/forecastjson?w="; + String WOEID = "898091"; + + // Get the JSON formatted response + String response = loadStrings( BASE_URL + WOEID )[0]; + + // Make sure we got a response. + if ( response != null ) { + // Initialize the JSONObject for the response + JSONObject root = new JSONObject( response ); + + // Get the "condition" JSONObject + JSONObject condition = root.getJSONObject("condition"); + + // Get the "temperature" value from the condition object + int temperature = condition.getInt("temperature"); + + // Print the temperature + println( temperature ); + } +} + +void draw() { +} diff --git a/distribution/json4processing-0.1.3/index.html b/distribution/json4processing-0.1.3/index.html new file mode 100644 index 000000000..82c8085ec --- /dev/null +++ b/distribution/json4processing-0.1.3/index.html @@ -0,0 +1,132 @@ + + + +json4processing + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/distribution/json4processing-0.1.3/reference/allclasses-frame.html b/distribution/json4processing-0.1.3/reference/allclasses-frame.html new file mode 100644 index 000000000..d0d9b5421 --- /dev/null +++ b/distribution/json4processing-0.1.3/reference/allclasses-frame.html @@ -0,0 +1,59 @@ + + + + + + +All Classes (Javadocs: json4processing) + + + + + + + + + + + +All Classes +
+ + + + + +
CDL +
+Cookie +
+CookieList +
+HTTP +
+HTTPTokener +
+JSONArray +
+JSONException +
+JSONML +
+JSONObject +
+JSONString +
+JSONStringer +
+JSONTokener +
+JSONWriter +
+XML +
+XMLTokener +
+
+ + + diff --git a/distribution/json4processing-0.1.3/reference/allclasses-noframe.html b/distribution/json4processing-0.1.3/reference/allclasses-noframe.html new file mode 100644 index 000000000..3d344817e --- /dev/null +++ b/distribution/json4processing-0.1.3/reference/allclasses-noframe.html @@ -0,0 +1,59 @@ + + + + + + +All Classes (Javadocs: json4processing) + + + + + + + + + + + +All Classes +
+ + + + + +
CDL +
+Cookie +
+CookieList +
+HTTP +
+HTTPTokener +
+JSONArray +
+JSONException +
+JSONML +
+JSONObject +
+JSONString +
+JSONStringer +
+JSONTokener +
+JSONWriter +
+XML +
+XMLTokener +
+
+ + + diff --git a/distribution/json4processing-0.1.3/reference/constant-values.html b/distribution/json4processing-0.1.3/reference/constant-values.html new file mode 100644 index 000000000..9049c118b --- /dev/null +++ b/distribution/json4processing-0.1.3/reference/constant-values.html @@ -0,0 +1,170 @@ + + + + + + +Constant Field Values (Javadocs: json4processing) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Constant Field Values

+
+
+Contents + + + + + + +
+org.json.*
+ +

+ + + + + + + + + + + + +
org.json.HTTP
+public static final java.lang.StringCRLF"\r\n"
+ +

+ +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+processing library json4processing by Andreas Goransson. (c) 2011 + + diff --git a/distribution/json4processing-0.1.3/reference/deprecated-list.html b/distribution/json4processing-0.1.3/reference/deprecated-list.html new file mode 100644 index 000000000..14acd54f1 --- /dev/null +++ b/distribution/json4processing-0.1.3/reference/deprecated-list.html @@ -0,0 +1,142 @@ + + + + + + +Deprecated List (Javadocs: json4processing) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Deprecated API

+
+
+Contents
    +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+processing library json4processing by Andreas Goransson. (c) 2011 + + diff --git a/distribution/json4processing-0.1.3/reference/help-doc.html b/distribution/json4processing-0.1.3/reference/help-doc.html new file mode 100644 index 000000000..4355fa00f --- /dev/null +++ b/distribution/json4processing-0.1.3/reference/help-doc.html @@ -0,0 +1,209 @@ + + + + + + +API Help (Javadocs: json4processing) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+How This API Document Is Organized

+
+This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.

+Package

+
+ +

+Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:

    +
  • Interfaces (italic)
  • Classes
  • Enums
  • Exceptions
  • Errors
  • Annotation Types
+
+

+Class/Interface

+
+ +

+Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

    +
  • Class inheritance diagram
  • Direct Subclasses
  • All Known Subinterfaces
  • All Known Implementing Classes
  • Class/interface declaration
  • Class/interface description +

    +

  • Nested Class Summary
  • Field Summary
  • Constructor Summary
  • Method Summary +

    +

  • Field Detail
  • Constructor Detail
  • Method Detail
+Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.
+ +

+Annotation Type

+
+ +

+Each annotation type has its own separate page with the following sections:

    +
  • Annotation Type declaration
  • Annotation Type description
  • Required Element Summary
  • Optional Element Summary
  • Element Detail
+
+ +

+Enum

+
+ +

+Each enum has its own separate page with the following sections:

    +
  • Enum declaration
  • Enum description
  • Enum Constant Summary
  • Enum Constant Detail
+
+

+Tree (Class Hierarchy)

+
+There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.
    +
  • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
  • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
+
+

+Deprecated API

+
+The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.
+

+Index

+
+The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.
+

+Prev/Next

+These links take you to the next or previous class, interface, package, or related page.

+Frames/No Frames

+These links show and hide the HTML frames. All pages are available with or without frames. +

+

+Serialized Form

+Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description. +

+

+Constant Field Values

+The Constant Field Values page lists the static final fields and their values. +

+ + +This help file applies to API documentation generated using the standard doclet. + +
+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+processing library json4processing by Andreas Goransson. (c) 2011 + + diff --git a/distribution/json4processing-0.1.3/reference/index-all.html b/distribution/json4processing-0.1.3/reference/index-all.html new file mode 100644 index 000000000..ba1661100 --- /dev/null +++ b/distribution/json4processing-0.1.3/reference/index-all.html @@ -0,0 +1,899 @@ + + + + + + +Index (Javadocs: json4processing) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E G H I J K L M N O P Q R S T U V W X
+

+A

+
+
accumulate(String, Object) - +Method in class org.json.JSONObject +
Accumulate values under a key. +
AMP - +Static variable in class org.json.XML +
The Character '&'. +
APOS - +Static variable in class org.json.XML +
The Character '''. +
append(String, Object) - +Method in class org.json.JSONObject +
Append values to the array under a key. +
array() - +Method in class org.json.JSONWriter +
Begin appending a new array. +
+
+

+B

+
+
back() - +Method in class org.json.JSONTokener +
Back up one character. +
BANG - +Static variable in class org.json.XML +
The Character '!'. +
+
+

+C

+
+
CDL - Class in org.json
This provides static methods to convert comma delimited text into a + JSONArray, and to covert a JSONArray into comma delimited text.
CDL() - +Constructor for class org.json.CDL +
  +
Cookie - Class in org.json
Convert a web browser cookie specification to a JSONObject and back.
Cookie() - +Constructor for class org.json.Cookie +
  +
CookieList - Class in org.json
Convert a web browser cookie list string to a JSONObject and back.
CookieList() - +Constructor for class org.json.CookieList +
  +
CRLF - +Static variable in class org.json.HTTP +
Carriage return/line feed. +
+
+

+D

+
+
dehexchar(char) - +Static method in class org.json.JSONTokener +
Get the hex value of a character (base16). +
doubleToString(double) - +Static method in class org.json.JSONObject +
Produce a string from a double. +
+
+

+E

+
+
end() - +Method in class org.json.JSONTokener +
  +
endArray() - +Method in class org.json.JSONWriter +
End an array. +
endObject() - +Method in class org.json.JSONWriter +
End an object. +
entity - +Static variable in class org.json.XMLTokener +
The table of entity values. +
EQ - +Static variable in class org.json.XML +
The Character '='. +
escape(String) - +Static method in class org.json.Cookie +
Produce a copy of a string in which the characters '+', '%', '=', ';' + and control characters are replaced with "%hh". +
escape(String) - +Static method in class org.json.XML +
Replace special characters with XML escapes: + + & (ampersand) is replaced by &amp; + < (less than) is replaced by &lt; + > (greater than) is replaced by &gt; + " (double quote) is replaced by &quot; + +
+
+

+G

+
+
get(int) - +Method in class org.json.JSONArray +
Get the object value associated with an index. +
get(String) - +Method in class org.json.JSONObject +
Get the value object associated with a key. +
getBoolean(int) - +Method in class org.json.JSONArray +
Get the boolean value associated with an index. +
getBoolean(String) - +Method in class org.json.JSONObject +
Get the boolean value associated with a key. +
getCause() - +Method in exception org.json.JSONException +
  +
getDouble(int) - +Method in class org.json.JSONArray +
Get the double value associated with an index. +
getDouble(String) - +Method in class org.json.JSONObject +
Get the double value associated with a key. +
getInt(int) - +Method in class org.json.JSONArray +
Get the int value associated with an index. +
getInt(String) - +Method in class org.json.JSONObject +
Get the int value associated with a key. +
getJSONArray(int) - +Method in class org.json.JSONArray +
Get the JSONArray associated with an index. +
getJSONArray(String) - +Method in class org.json.JSONObject +
Get the JSONArray value associated with a key. +
getJSONObject(int) - +Method in class org.json.JSONArray +
Get the JSONObject associated with an index. +
getJSONObject(String) - +Method in class org.json.JSONObject +
Get the JSONObject value associated with a key. +
getLong(int) - +Method in class org.json.JSONArray +
Get the long value associated with an index. +
getLong(String) - +Method in class org.json.JSONObject +
Get the long value associated with a key. +
getNames(JSONObject) - +Static method in class org.json.JSONObject +
Get an array of field names from a JSONObject. +
getNames(Object) - +Static method in class org.json.JSONObject +
Get an array of field names from an Object. +
getString(int) - +Method in class org.json.JSONArray +
Get the string associated with an index. +
getString(String) - +Method in class org.json.JSONObject +
Get the string associated with a key. +
GT - +Static variable in class org.json.XML +
The Character '>'. +
+
+

+H

+
+
has(String) - +Method in class org.json.JSONObject +
Determine if the JSONObject contains a specific key. +
HTTP - Class in org.json
Convert an HTTP header to a JSONObject and back.
HTTP() - +Constructor for class org.json.HTTP +
  +
HTTPTokener - Class in org.json
The HTTPTokener extends the JSONTokener to provide additional methods + for the parsing of HTTP headers.
HTTPTokener(String) - +Constructor for class org.json.HTTPTokener +
Construct an HTTPTokener from a string. +
+
+

+I

+
+
increment(String) - +Method in class org.json.JSONObject +
Increment a property of a JSONObject. +
isNull(int) - +Method in class org.json.JSONArray +
Determine if the value is null. +
isNull(String) - +Method in class org.json.JSONObject +
Determine if the value associated with the key is null or if there is no + value. +
+
+

+J

+
+
join(String) - +Method in class org.json.JSONArray +
Make a string from the contents of this JSONArray. +
JSONArray - Class in org.json
A JSONArray is an ordered sequence of values.
JSONArray() - +Constructor for class org.json.JSONArray +
Construct an empty JSONArray. +
JSONArray(JSONTokener) - +Constructor for class org.json.JSONArray +
Construct a JSONArray from a JSONTokener. +
JSONArray(String) - +Constructor for class org.json.JSONArray +
Construct a JSONArray from a source JSON text. +
JSONArray(Collection) - +Constructor for class org.json.JSONArray +
Construct a JSONArray from a Collection. +
JSONArray(Object) - +Constructor for class org.json.JSONArray +
Construct a JSONArray from an array +
JSONException - Exception in org.json
The JSONException is thrown by the JSON.org classes when things are amiss.
JSONException(String) - +Constructor for exception org.json.JSONException +
Constructs a JSONException with an explanatory message. +
JSONException(Throwable) - +Constructor for exception org.json.JSONException +
  +
JSONML - Class in org.json
This provides static methods to convert an XML text into a JSONArray or + JSONObject, and to covert a JSONArray or JSONObject into an XML text using + the JsonML transform.
JSONML() - +Constructor for class org.json.JSONML +
  +
JSONObject - Class in org.json
A JSONObject is an unordered collection of name/value pairs.
JSONObject() - +Constructor for class org.json.JSONObject +
Construct an empty JSONObject. +
JSONObject(JSONObject, String[]) - +Constructor for class org.json.JSONObject +
Construct a JSONObject from a subset of another JSONObject. +
JSONObject(JSONTokener) - +Constructor for class org.json.JSONObject +
Construct a JSONObject from a JSONTokener. +
JSONObject(Map) - +Constructor for class org.json.JSONObject +
Construct a JSONObject from a Map. +
JSONObject(Object) - +Constructor for class org.json.JSONObject +
Construct a JSONObject from an Object using bean getters. +
JSONObject(Object, String[]) - +Constructor for class org.json.JSONObject +
Construct a JSONObject from an Object, using reflection to find the + public members. +
JSONObject(String) - +Constructor for class org.json.JSONObject +
Construct a JSONObject from a source JSON text string. +
JSONObject(String, Locale) - +Constructor for class org.json.JSONObject +
Construct a JSONObject from a ResourceBundle. +
JSONString - Interface in org.json
The JSONString interface allows a toJSONString() + method so that a class can change the behavior of + JSONObject.toString(), JSONArray.toString(), + and JSONWriter.value(Object).
JSONStringer - Class in org.json
JSONStringer provides a quick and convenient way of producing JSON text.
JSONStringer() - +Constructor for class org.json.JSONStringer +
Make a fresh JSONStringer. +
JSONTokener - Class in org.json
A JSONTokener takes a source string and extracts characters and tokens from + it.
JSONTokener(Reader) - +Constructor for class org.json.JSONTokener +
Construct a JSONTokener from a Reader. +
JSONTokener(InputStream) - +Constructor for class org.json.JSONTokener +
Construct a JSONTokener from an InputStream. +
JSONTokener(String) - +Constructor for class org.json.JSONTokener +
Construct a JSONTokener from a string. +
JSONWriter - Class in org.json
JSONWriter provides a quick and convenient way of producing JSON text.
JSONWriter(Writer) - +Constructor for class org.json.JSONWriter +
Make a fresh JSONWriter. +
+
+

+K

+
+
key(String) - +Method in class org.json.JSONWriter +
Append a key. +
keys() - +Method in class org.json.JSONObject +
Get an enumeration of the keys of the JSONObject. +
+
+

+L

+
+
length() - +Method in class org.json.JSONArray +
Get the number of elements in the JSONArray, included nulls. +
length() - +Method in class org.json.JSONObject +
Get the number of keys stored in the JSONObject. +
LT - +Static variable in class org.json.XML +
The Character '<'. +
+
+

+M

+
+
more() - +Method in class org.json.JSONTokener +
Determine if the source string still contains characters that next() + can consume. +
+
+

+N

+
+
names() - +Method in class org.json.JSONObject +
Produce a JSONArray containing the names of the elements of this + JSONObject. +
next() - +Method in class org.json.JSONTokener +
Get the next character in the source string. +
next(char) - +Method in class org.json.JSONTokener +
Consume the next character, and check that it matches a specified + character. +
next(int) - +Method in class org.json.JSONTokener +
Get the next n characters. +
nextCDATA() - +Method in class org.json.XMLTokener +
Get the text in the CDATA block. +
nextClean() - +Method in class org.json.JSONTokener +
Get the next char in the string, skipping whitespace. +
nextContent() - +Method in class org.json.XMLTokener +
Get the next XML outer token, trimming whitespace. +
nextEntity(char) - +Method in class org.json.XMLTokener +
Return the next entity. +
nextMeta() - +Method in class org.json.XMLTokener +
Returns the next XML meta token. +
nextString(char) - +Method in class org.json.JSONTokener +
Return the characters up to the next close quote character. +
nextTo(char) - +Method in class org.json.JSONTokener +
Get the text up but not including the specified character or the + end of line, whichever comes first. +
nextTo(String) - +Method in class org.json.JSONTokener +
Get the text up but not including one of the specified delimiter + characters or the end of line, whichever comes first. +
nextToken() - +Method in class org.json.HTTPTokener +
Get the next token or string. +
nextToken() - +Method in class org.json.XMLTokener +
Get the next XML Token. +
nextValue() - +Method in class org.json.JSONTokener +
Get the next value. +
noSpace(String) - +Static method in class org.json.XML +
Throw an exception if the string contains whitespace. +
NULL - +Static variable in class org.json.JSONObject +
It is sometimes more convenient and less ambiguous to have a + NULL object than to use Java's null value. +
numberToString(Number) - +Static method in class org.json.JSONObject +
Produce a string from a Number. +
+
+

+O

+
+
object() - +Method in class org.json.JSONWriter +
Begin appending a new object. +
opt(int) - +Method in class org.json.JSONArray +
Get the optional object value associated with an index. +
opt(String) - +Method in class org.json.JSONObject +
Get an optional value associated with a key. +
optBoolean(int) - +Method in class org.json.JSONArray +
Get the optional boolean value associated with an index. +
optBoolean(int, boolean) - +Method in class org.json.JSONArray +
Get the optional boolean value associated with an index. +
optBoolean(String) - +Method in class org.json.JSONObject +
Get an optional boolean associated with a key. +
optBoolean(String, boolean) - +Method in class org.json.JSONObject +
Get an optional boolean associated with a key. +
optDouble(int) - +Method in class org.json.JSONArray +
Get the optional double value associated with an index. +
optDouble(int, double) - +Method in class org.json.JSONArray +
Get the optional double value associated with an index. +
optDouble(String) - +Method in class org.json.JSONObject +
Get an optional double associated with a key, or NaN if there is no such + key or if its value is not a number. +
optDouble(String, double) - +Method in class org.json.JSONObject +
Get an optional double associated with a key, or the defaultValue if + there is no such key or if its value is not a number. +
optInt(int) - +Method in class org.json.JSONArray +
Get the optional int value associated with an index. +
optInt(int, int) - +Method in class org.json.JSONArray +
Get the optional int value associated with an index. +
optInt(String) - +Method in class org.json.JSONObject +
Get an optional int value associated with a key, or zero if there is no + such key or if the value is not a number. +
optInt(String, int) - +Method in class org.json.JSONObject +
Get an optional int value associated with a key, or the default if there + is no such key or if the value is not a number. +
optJSONArray(int) - +Method in class org.json.JSONArray +
Get the optional JSONArray associated with an index. +
optJSONArray(String) - +Method in class org.json.JSONObject +
Get an optional JSONArray associated with a key. +
optJSONObject(int) - +Method in class org.json.JSONArray +
Get the optional JSONObject associated with an index. +
optJSONObject(String) - +Method in class org.json.JSONObject +
Get an optional JSONObject associated with a key. +
optLong(int) - +Method in class org.json.JSONArray +
Get the optional long value associated with an index. +
optLong(int, long) - +Method in class org.json.JSONArray +
Get the optional long value associated with an index. +
optLong(String) - +Method in class org.json.JSONObject +
Get an optional long value associated with a key, or zero if there is no + such key or if the value is not a number. +
optLong(String, long) - +Method in class org.json.JSONObject +
Get an optional long value associated with a key, or the default if there + is no such key or if the value is not a number. +
optString(int) - +Method in class org.json.JSONArray +
Get the optional string value associated with an index. +
optString(int, String) - +Method in class org.json.JSONArray +
Get the optional string associated with an index. +
optString(String) - +Method in class org.json.JSONObject +
Get an optional string associated with a key. +
optString(String, String) - +Method in class org.json.JSONObject +
Get an optional string associated with a key. +
org.json - package org.json
 
+
+

+P

+
+
put(boolean) - +Method in class org.json.JSONArray +
Append a boolean value. +
put(Collection) - +Method in class org.json.JSONArray +
Put a value in the JSONArray, where the value will be a + JSONArray which is produced from a Collection. +
put(double) - +Method in class org.json.JSONArray +
Append a double value. +
put(int) - +Method in class org.json.JSONArray +
Append an int value. +
put(long) - +Method in class org.json.JSONArray +
Append an long value. +
put(Map) - +Method in class org.json.JSONArray +
Put a value in the JSONArray, where the value will be a + JSONObject which is produced from a Map. +
put(Object) - +Method in class org.json.JSONArray +
Append an object value. +
put(int, boolean) - +Method in class org.json.JSONArray +
Put or replace a boolean value in the JSONArray. +
put(int, Collection) - +Method in class org.json.JSONArray +
Put a value in the JSONArray, where the value will be a + JSONArray which is produced from a Collection. +
put(int, double) - +Method in class org.json.JSONArray +
Put or replace a double value. +
put(int, int) - +Method in class org.json.JSONArray +
Put or replace an int value. +
put(int, long) - +Method in class org.json.JSONArray +
Put or replace a long value. +
put(int, Map) - +Method in class org.json.JSONArray +
Put a value in the JSONArray, where the value will be a + JSONObject that is produced from a Map. +
put(int, Object) - +Method in class org.json.JSONArray +
Put or replace an object value in the JSONArray. +
put(String, boolean) - +Method in class org.json.JSONObject +
Put a key/boolean pair in the JSONObject. +
put(String, Collection) - +Method in class org.json.JSONObject +
Put a key/value pair in the JSONObject, where the value will be a + JSONArray which is produced from a Collection. +
put(String, double) - +Method in class org.json.JSONObject +
Put a key/double pair in the JSONObject. +
put(String, int) - +Method in class org.json.JSONObject +
Put a key/int pair in the JSONObject. +
put(String, long) - +Method in class org.json.JSONObject +
Put a key/long pair in the JSONObject. +
put(String, Map) - +Method in class org.json.JSONObject +
Put a key/value pair in the JSONObject, where the value will be a + JSONObject which is produced from a Map. +
put(String, Object) - +Method in class org.json.JSONObject +
Put a key/value pair in the JSONObject. +
putOnce(String, Object) - +Method in class org.json.JSONObject +
Put a key/value pair in the JSONObject, but only if the key and the value + are both non-null, and only if there is not already a member with that + name. +
putOpt(String, Object) - +Method in class org.json.JSONObject +
Put a key/value pair in the JSONObject, but only if the key and the value + are both non-null. +
+
+

+Q

+
+
QUEST - +Static variable in class org.json.XML +
The Character '?'. +
QUOT - +Static variable in class org.json.XML +
The Character '"'. +
quote(String) - +Static method in class org.json.JSONObject +
Produce a string in double quotes with backslash sequences in all the + right places. +
+
+

+R

+
+
remove(int) - +Method in class org.json.JSONArray +
Remove an index and close the hole. +
remove(String) - +Method in class org.json.JSONObject +
Remove a name and its value, if present. +
rowToJSONArray(JSONTokener) - +Static method in class org.json.CDL +
Produce a JSONArray of strings from a row of comma delimited values. +
rowToJSONObject(JSONArray, JSONTokener) - +Static method in class org.json.CDL +
Produce a JSONObject from a row of comma delimited text, using a + parallel JSONArray of strings to provides the names of the elements. +
rowToString(JSONArray) - +Static method in class org.json.CDL +
Produce a comma delimited text row from a JSONArray. +
+
+

+S

+
+
skipPast(String) - +Method in class org.json.XMLTokener +
Skip characters until past the requested string. +
skipTo(char) - +Method in class org.json.JSONTokener +
Skip characters until the next character is the requested character. +
SLASH - +Static variable in class org.json.XML +
The Character '/'. +
stringToValue(String) - +Static method in class org.json.JSONObject +
Try to convert a string into a number, boolean, or null. +
stringToValue(String) - +Static method in class org.json.XML +
Try to convert a string into a number, boolean, or null. +
syntaxError(String) - +Method in class org.json.JSONTokener +
Make a JSONException to signal a syntax error. +
+
+

+T

+
+
testValidity(Object) - +Static method in class org.json.JSONObject +
Throw an exception if the object is a NaN or infinite number. +
toJSONArray(String) - +Static method in class org.json.CDL +
Produce a JSONArray of JSONObjects from a comma delimited text string, + using the first row as a source of names. +
toJSONArray(JSONTokener) - +Static method in class org.json.CDL +
Produce a JSONArray of JSONObjects from a comma delimited text string, + using the first row as a source of names. +
toJSONArray(JSONArray, String) - +Static method in class org.json.CDL +
Produce a JSONArray of JSONObjects from a comma delimited text string + using a supplied JSONArray as the source of element names. +
toJSONArray(JSONArray, JSONTokener) - +Static method in class org.json.CDL +
Produce a JSONArray of JSONObjects from a comma delimited text string + using a supplied JSONArray as the source of element names. +
toJSONArray(String) - +Static method in class org.json.JSONML +
Convert a well-formed (but not necessarily valid) XML string into a + JSONArray using the JsonML transform. +
toJSONArray(XMLTokener) - +Static method in class org.json.JSONML +
Convert a well-formed (but not necessarily valid) XML string into a + JSONArray using the JsonML transform. +
toJSONArray(JSONArray) - +Method in class org.json.JSONObject +
Produce a JSONArray containing the values of the members of this + JSONObject. +
toJSONObject(String) - +Static method in class org.json.Cookie +
Convert a cookie specification string into a JSONObject. +
toJSONObject(String) - +Static method in class org.json.CookieList +
Convert a cookie list into a JSONObject. +
toJSONObject(String) - +Static method in class org.json.HTTP +
Convert an HTTP header string into a JSONObject. +
toJSONObject(JSONArray) - +Method in class org.json.JSONArray +
Produce a JSONObject by combining a JSONArray of names with the values + of this JSONArray. +
toJSONObject(XMLTokener) - +Static method in class org.json.JSONML +
Convert a well-formed (but not necessarily valid) XML string into a + JSONObject using the JsonML transform. +
toJSONObject(String) - +Static method in class org.json.JSONML +
Convert a well-formed (but not necessarily valid) XML string into a + JSONObject using the JsonML transform. +
toJSONObject(String) - +Static method in class org.json.XML +
Convert a well-formed (but not necessarily valid) XML string into a + JSONObject. +
toJSONString() - +Method in interface org.json.JSONString +
The toJSONString method allows a class to produce its own JSON + serialization. +
toString(JSONArray) - +Static method in class org.json.CDL +
Produce a comma delimited text from a JSONArray of JSONObjects. +
toString(JSONArray, JSONArray) - +Static method in class org.json.CDL +
Produce a comma delimited text from a JSONArray of JSONObjects using + a provided list of names. +
toString(JSONObject) - +Static method in class org.json.Cookie +
Convert a JSONObject into a cookie specification string. +
toString(JSONObject) - +Static method in class org.json.CookieList +
Convert a JSONObject into a cookie list. +
toString(JSONObject) - +Static method in class org.json.HTTP +
Convert a JSONObject into an HTTP header. +
toString() - +Method in class org.json.JSONArray +
Make a JSON text of this JSONArray. +
toString(int) - +Method in class org.json.JSONArray +
Make a prettyprinted JSON text of this JSONArray. +
toString(JSONArray) - +Static method in class org.json.JSONML +
Reverse the JSONML transformation, making an XML text from a JSONArray. +
toString(JSONObject) - +Static method in class org.json.JSONML +
Reverse the JSONML transformation, making an XML text from a JSONObject. +
toString() - +Method in class org.json.JSONObject +
Make a JSON text of this JSONObject. +
toString(int) - +Method in class org.json.JSONObject +
Make a prettyprinted JSON text of this JSONObject. +
toString() - +Method in class org.json.JSONStringer +
Return the JSON text. +
toString() - +Method in class org.json.JSONTokener +
Make a printable string of this JSONTokener. +
toString(Object) - +Static method in class org.json.XML +
Convert a JSONObject into a well-formed, element-normal XML string. +
toString(Object, String) - +Static method in class org.json.XML +
Convert a JSONObject into a well-formed, element-normal XML string. +
+
+

+U

+
+
unescape(String) - +Static method in class org.json.Cookie +
Convert %hh sequences to single characters, and + convert plus to space. +
+
+

+V

+
+
value(boolean) - +Method in class org.json.JSONWriter +
Append either the value true or the value + false. +
value(double) - +Method in class org.json.JSONWriter +
Append a double value. +
value(long) - +Method in class org.json.JSONWriter +
Append a long value. +
value(Object) - +Method in class org.json.JSONWriter +
Append an object value. +
valueToString(Object) - +Static method in class org.json.JSONObject +
Make a JSON text of an Object value. +
+
+

+W

+
+
wrap(Object) - +Static method in class org.json.JSONObject +
Wrap an object, if necessary. +
write(Writer) - +Method in class org.json.JSONArray +
Write the contents of the JSONArray as JSON text to a writer. +
write(Writer) - +Method in class org.json.JSONObject +
Write the contents of the JSONObject as JSON text to a writer. +
+
+

+X

+
+
XML - Class in org.json
This provides static methods to convert an XML text into a JSONObject, + and to covert a JSONObject into an XML text.
XML() - +Constructor for class org.json.XML +
  +
XMLTokener - Class in org.json
The XMLTokener extends the JSONTokener to provide additional methods + for the parsing of XML texts.
XMLTokener(String) - +Constructor for class org.json.XMLTokener +
Construct an XMLTokener from a string. +
+
+A B C D E G H I J K L M N O P Q R S T U V W X + + + + + + + + + + + + + + +
+ +
+ + + +
+processing library json4processing by Andreas Goransson. (c) 2011 + + diff --git a/distribution/json4processing-0.1.3/reference/index.html b/distribution/json4processing-0.1.3/reference/index.html new file mode 100644 index 000000000..2c2d1bebd --- /dev/null +++ b/distribution/json4processing-0.1.3/reference/index.html @@ -0,0 +1,36 @@ + + + + + + +Javadocs: json4processing + + + + + + + + +<H2> +Frame Alert</H2> + +<P> +This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. +<BR> +Link to<A HREF="org/json/package-summary.html">Non-frame version.</A> + + + diff --git a/distribution/json4processing-0.1.3/reference/org/json/CDL.html b/distribution/json4processing-0.1.3/reference/org/json/CDL.html new file mode 100644 index 000000000..42c2ad5b4 --- /dev/null +++ b/distribution/json4processing-0.1.3/reference/org/json/CDL.html @@ -0,0 +1,500 @@ + + + + + + +CDL (Javadocs: json4processing) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.json +
+Class CDL

+
+java.lang.Object
+  extended by org.json.CDL
+
+
+
+
public class CDL
extends java.lang.Object
+ + +

+This provides static methods to convert comma delimited text into a + JSONArray, and to covert a JSONArray into comma delimited text. Comma + delimited text is a very popular format for data interchange. It is + understood by most database, spreadsheet, and organizer programs. +

+ Each row of text represents a row in a table or a data record. Each row + ends with a NEWLINE character. Each row contains one or more values. + Values are separated by commas. A value can contain any character except + for comma, unless is is wrapped in single quotes or double quotes. +

+ The first row usually contains the names of the columns. +

+ A comma delimited list can be converted into a JSONArray of JSONObjects. + The names for the elements in the JSONObjects can be taken from the names + in the first row. +

+ +

+

+
Author:
+
JSON.org
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
CDL() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+static JSONArrayrowToJSONArray(JSONTokener x) + +
+          Produce a JSONArray of strings from a row of comma delimited values.
+static JSONObjectrowToJSONObject(JSONArray names, + JSONTokener x) + +
+          Produce a JSONObject from a row of comma delimited text, using a + parallel JSONArray of strings to provides the names of the elements.
+static java.lang.StringrowToString(JSONArray ja) + +
+          Produce a comma delimited text row from a JSONArray.
+static JSONArraytoJSONArray(JSONArray names, + JSONTokener x) + +
+          Produce a JSONArray of JSONObjects from a comma delimited text string + using a supplied JSONArray as the source of element names.
+static JSONArraytoJSONArray(JSONArray names, + java.lang.String string) + +
+          Produce a JSONArray of JSONObjects from a comma delimited text string + using a supplied JSONArray as the source of element names.
+static JSONArraytoJSONArray(JSONTokener x) + +
+          Produce a JSONArray of JSONObjects from a comma delimited text string, + using the first row as a source of names.
+static JSONArraytoJSONArray(java.lang.String string) + +
+          Produce a JSONArray of JSONObjects from a comma delimited text string, + using the first row as a source of names.
+static java.lang.StringtoString(JSONArray ja) + +
+          Produce a comma delimited text from a JSONArray of JSONObjects.
+static java.lang.StringtoString(JSONArray names, + JSONArray ja) + +
+          Produce a comma delimited text from a JSONArray of JSONObjects using + a provided list of names.
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+CDL

+
+public CDL()
+
+
+ + + + + + + + +
+Method Detail
+ +

+rowToJSONArray

+
+public static JSONArray rowToJSONArray(JSONTokener x)
+                                throws JSONException
+
+
Produce a JSONArray of strings from a row of comma delimited values. +

+

+
Parameters:
x - A JSONTokener of the source text. +
Returns:
A JSONArray of strings. +
Throws: +
JSONException
+
+
+
+ +

+rowToJSONObject

+
+public static JSONObject rowToJSONObject(JSONArray names,
+                                         JSONTokener x)
+                                  throws JSONException
+
+
Produce a JSONObject from a row of comma delimited text, using a + parallel JSONArray of strings to provides the names of the elements. +

+

+
Parameters:
names - A JSONArray of names. This is commonly obtained from the + first row of a comma delimited text file using the rowToJSONArray + method.
x - A JSONTokener of the source text. +
Returns:
A JSONObject combining the names and values. +
Throws: +
JSONException
+
+
+
+ +

+rowToString

+
+public static java.lang.String rowToString(JSONArray ja)
+
+
Produce a comma delimited text row from a JSONArray. Values containing + the comma character will be quoted. Troublesome characters may be + removed. +

+

+
Parameters:
ja - A JSONArray of strings. +
Returns:
A string ending in NEWLINE.
+
+
+
+ +

+toJSONArray

+
+public static JSONArray toJSONArray(java.lang.String string)
+                             throws JSONException
+
+
Produce a JSONArray of JSONObjects from a comma delimited text string, + using the first row as a source of names. +

+

+
Parameters:
string - The comma delimited text. +
Returns:
A JSONArray of JSONObjects. +
Throws: +
JSONException
+
+
+
+ +

+toJSONArray

+
+public static JSONArray toJSONArray(JSONTokener x)
+                             throws JSONException
+
+
Produce a JSONArray of JSONObjects from a comma delimited text string, + using the first row as a source of names. +

+

+
Parameters:
x - The JSONTokener containing the comma delimited text. +
Returns:
A JSONArray of JSONObjects. +
Throws: +
JSONException
+
+
+
+ +

+toJSONArray

+
+public static JSONArray toJSONArray(JSONArray names,
+                                    java.lang.String string)
+                             throws JSONException
+
+
Produce a JSONArray of JSONObjects from a comma delimited text string + using a supplied JSONArray as the source of element names. +

+

+
Parameters:
names - A JSONArray of strings.
string - The comma delimited text. +
Returns:
A JSONArray of JSONObjects. +
Throws: +
JSONException
+
+
+
+ +

+toJSONArray

+
+public static JSONArray toJSONArray(JSONArray names,
+                                    JSONTokener x)
+                             throws JSONException
+
+
Produce a JSONArray of JSONObjects from a comma delimited text string + using a supplied JSONArray as the source of element names. +

+

+
Parameters:
names - A JSONArray of strings.
x - A JSONTokener of the source text. +
Returns:
A JSONArray of JSONObjects. +
Throws: +
JSONException
+
+
+
+ +

+toString

+
+public static java.lang.String toString(JSONArray ja)
+                                 throws JSONException
+
+
Produce a comma delimited text from a JSONArray of JSONObjects. The + first row will be a list of names obtained by inspecting the first + JSONObject. +

+

+
Parameters:
ja - A JSONArray of JSONObjects. +
Returns:
A comma delimited text. +
Throws: +
JSONException
+
+
+
+ +

+toString

+
+public static java.lang.String toString(JSONArray names,
+                                        JSONArray ja)
+                                 throws JSONException
+
+
Produce a comma delimited text from a JSONArray of JSONObjects using + a provided list of names. The list of names is not included in the + output. +

+

+
Parameters:
names - A JSONArray of strings.
ja - A JSONArray of JSONObjects. +
Returns:
A comma delimited text. +
Throws: +
JSONException
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+processing library json4processing by Andreas Goransson. (c) 2011 + + diff --git a/distribution/json4processing-0.1.3/reference/org/json/Cookie.html b/distribution/json4processing-0.1.3/reference/org/json/Cookie.html new file mode 100644 index 000000000..b28d66d7c --- /dev/null +++ b/distribution/json4processing-0.1.3/reference/org/json/Cookie.html @@ -0,0 +1,357 @@ + + + + + + +Cookie (Javadocs: json4processing) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.json +
+Class Cookie

+
+java.lang.Object
+  extended by org.json.Cookie
+
+
+
+
public class Cookie
extends java.lang.Object
+ + +

+Convert a web browser cookie specification to a JSONObject and back. + JSON and Cookies are both notations for name/value pairs. +

+ +

+

+
Author:
+
JSON.org
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
Cookie() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+static java.lang.Stringescape(java.lang.String string) + +
+          Produce a copy of a string in which the characters '+', '%', '=', ';' + and control characters are replaced with "%hh".
+static JSONObjecttoJSONObject(java.lang.String string) + +
+          Convert a cookie specification string into a JSONObject.
+static java.lang.StringtoString(JSONObject jo) + +
+          Convert a JSONObject into a cookie specification string.
+static java.lang.Stringunescape(java.lang.String string) + +
+          Convert %hh sequences to single characters, and + convert plus to space.
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+Cookie

+
+public Cookie()
+
+
+ + + + + + + + +
+Method Detail
+ +

+escape

+
+public static java.lang.String escape(java.lang.String string)
+
+
Produce a copy of a string in which the characters '+', '%', '=', ';' + and control characters are replaced with "%hh". This is a gentle form + of URL encoding, attempting to cause as little distortion to the + string as possible. The characters '=' and ';' are meta characters in + cookies. By convention, they are escaped using the URL-encoding. This is + only a convention, not a standard. Often, cookies are expected to have + encoded values. We encode '=' and ';' because we must. We encode '%' and + '+' because they are meta characters in URL encoding. +

+

+
Parameters:
string - The source string. +
Returns:
The escaped result.
+
+
+
+ +

+toJSONObject

+
+public static JSONObject toJSONObject(java.lang.String string)
+                               throws JSONException
+
+
Convert a cookie specification string into a JSONObject. The string + will contain a name value pair separated by '='. The name and the value + will be unescaped, possibly converting '+' and '%' sequences. The + cookie properties may follow, separated by ';', also represented as + name=value (except the secure property, which does not have a value). + The name will be stored under the key "name", and the value will be + stored under the key "value". This method does not do checking or + validation of the parameters. It only converts the cookie string into + a JSONObject. +

+

+
Parameters:
string - The cookie specification string. +
Returns:
A JSONObject containing "name", "value", and possibly other + members. +
Throws: +
JSONException
+
+
+
+ +

+toString

+
+public static java.lang.String toString(JSONObject jo)
+                                 throws JSONException
+
+
Convert a JSONObject into a cookie specification string. The JSONObject + must contain "name" and "value" members. + If the JSONObject contains "expires", "domain", "path", or "secure" + members, they will be appended to the cookie specification string. + All other members are ignored. +

+

+
Parameters:
jo - A JSONObject +
Returns:
A cookie specification string +
Throws: +
JSONException
+
+
+
+ +

+unescape

+
+public static java.lang.String unescape(java.lang.String string)
+
+
Convert %hh sequences to single characters, and + convert plus to space. +

+

+
Parameters:
string - A string that may contain + + (plus) and + %hh sequences. +
Returns:
The unescaped string.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+processing library json4processing by Andreas Goransson. (c) 2011 + + diff --git a/distribution/json4processing-0.1.3/reference/org/json/CookieList.html b/distribution/json4processing-0.1.3/reference/org/json/CookieList.html new file mode 100644 index 000000000..1586b5db0 --- /dev/null +++ b/distribution/json4processing-0.1.3/reference/org/json/CookieList.html @@ -0,0 +1,297 @@ + + + + + + +CookieList (Javadocs: json4processing) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.json +
+Class CookieList

+
+java.lang.Object
+  extended by org.json.CookieList
+
+
+
+
public class CookieList
extends java.lang.Object
+ + +

+Convert a web browser cookie list string to a JSONObject and back. +

+ +

+

+
Author:
+
JSON.org
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
CookieList() + +
+           
+  + + + + + + + + + + + + + + + +
+Method Summary
+static JSONObjecttoJSONObject(java.lang.String string) + +
+          Convert a cookie list into a JSONObject.
+static java.lang.StringtoString(JSONObject jo) + +
+          Convert a JSONObject into a cookie list.
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+CookieList

+
+public CookieList()
+
+
+ + + + + + + + +
+Method Detail
+ +

+toJSONObject

+
+public static JSONObject toJSONObject(java.lang.String string)
+                               throws JSONException
+
+
Convert a cookie list into a JSONObject. A cookie list is a sequence + of name/value pairs. The names are separated from the values by '='. + The pairs are separated by ';'. The names and the values + will be unescaped, possibly converting '+' and '%' sequences. + + To add a cookie to a cooklist, + cookielistJSONObject.put(cookieJSONObject.getString("name"), + cookieJSONObject.getString("value")); +

+

+
Parameters:
string - A cookie list string +
Returns:
A JSONObject +
Throws: +
JSONException
+
+
+
+ +

+toString

+
+public static java.lang.String toString(JSONObject jo)
+                                 throws JSONException
+
+
Convert a JSONObject into a cookie list. A cookie list is a sequence + of name/value pairs. The names are separated from the values by '='. + The pairs are separated by ';'. The characters '%', '+', '=', and ';' + in the names and values are replaced by "%hh". +

+

+
Parameters:
jo - A JSONObject +
Returns:
A cookie list string +
Throws: +
JSONException
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+processing library json4processing by Andreas Goransson. (c) 2011 + + diff --git a/distribution/json4processing-0.1.3/reference/org/json/HTTP.html b/distribution/json4processing-0.1.3/reference/org/json/HTTP.html new file mode 100644 index 000000000..f892f1c89 --- /dev/null +++ b/distribution/json4processing-0.1.3/reference/org/json/HTTP.html @@ -0,0 +1,363 @@ + + + + + + +HTTP (Javadocs: json4processing) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.json +
+Class HTTP

+
+java.lang.Object
+  extended by org.json.HTTP
+
+
+
+
public class HTTP
extends java.lang.Object
+ + +

+Convert an HTTP header to a JSONObject and back. +

+ +

+

+
Author:
+
JSON.org
+
+
+ +

+ + + + + + + + + + + +
+Field Summary
+static java.lang.StringCRLF + +
+          Carriage return/line feed.
+  + + + + + + + + + + +
+Constructor Summary
HTTP() + +
+           
+  + + + + + + + + + + + + + + + +
+Method Summary
+static JSONObjecttoJSONObject(java.lang.String string) + +
+          Convert an HTTP header string into a JSONObject.
+static java.lang.StringtoString(JSONObject jo) + +
+          Convert a JSONObject into an HTTP header.
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+CRLF

+
+public static final java.lang.String CRLF
+
+
Carriage return/line feed. +

+

+
See Also:
Constant Field Values
+
+ + + + + + + + +
+Constructor Detail
+ +

+HTTP

+
+public HTTP()
+
+
+ + + + + + + + +
+Method Detail
+ +

+toJSONObject

+
+public static JSONObject toJSONObject(java.lang.String string)
+
+
Convert an HTTP header string into a JSONObject. It can be a request + header or a response header. A request header will contain +
{
+    Method: "POST" (for example),
+    "Request-URI": "/" (for example),
+    "HTTP-Version": "HTTP/1.1" (for example)
+ }
+ A response header will contain +
{
+    "HTTP-Version": "HTTP/1.1" (for example),
+    "Status-Code": "200" (for example),
+    "Reason-Phrase": "OK" (for example)
+ }
+ In addition, the other parameters in the header will be captured, using + the HTTP field names as JSON names, so that
+    Date: Sun, 26 May 2002 18:06:04 GMT
+    Cookie: Q=q2=PPEAsg--; B=677gi6ouf29bn&b=2&f=s
+    Cache-Control: no-cache
+ become +
{...
+    Date: "Sun, 26 May 2002 18:06:04 GMT",
+    Cookie: "Q=q2=PPEAsg--; B=677gi6ouf29bn&b=2&f=s",
+    "Cache-Control": "no-cache",
+ ...}
+ It does no further checking or conversion. It does not parse dates. + It does not do '%' transforms on URLs. +

+

+
Parameters:
string - An HTTP header string. +
Returns:
A JSONObject containing the elements and attributes + of the XML string. +
Throws: +
JSONException
+
+
+
+ +

+toString

+
+public static java.lang.String toString(JSONObject jo)
+
+
Convert a JSONObject into an HTTP header. A request header must contain +
{
+    Method: "POST" (for example),
+    "Request-URI": "/" (for example),
+    "HTTP-Version": "HTTP/1.1" (for example)
+ }
+ A response header must contain +
{
+    "HTTP-Version": "HTTP/1.1" (for example),
+    "Status-Code": "200" (for example),
+    "Reason-Phrase": "OK" (for example)
+ }
+ Any other members of the JSONObject will be output as HTTP fields. + The result will end with two CRLF pairs. +

+

+
Parameters:
jo - A JSONObject +
Returns:
An HTTP header string. +
Throws: +
JSONException - if the object does not contain enough + information.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+processing library json4processing by Andreas Goransson. (c) 2011 + + diff --git a/distribution/json4processing-0.1.3/reference/org/json/HTTPTokener.html b/distribution/json4processing-0.1.3/reference/org/json/HTTPTokener.html new file mode 100644 index 000000000..6848f411a --- /dev/null +++ b/distribution/json4processing-0.1.3/reference/org/json/HTTPTokener.html @@ -0,0 +1,277 @@ + + + + + + +HTTPTokener (Javadocs: json4processing) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.json +
+Class HTTPTokener

+
+java.lang.Object
+  extended by org.json.JSONTokener
+      extended by org.json.HTTPTokener
+
+
+
+
public class HTTPTokener
extends JSONTokener
+ + +

+The HTTPTokener extends the JSONTokener to provide additional methods + for the parsing of HTTP headers. +

+ +

+

+
Author:
+
JSON.org
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
HTTPTokener(java.lang.String string) + +
+          Construct an HTTPTokener from a string.
+  + + + + + + + + + + + +
+Method Summary
+ java.lang.StringnextToken() + +
+          Get the next token or string.
+ + + + + + + +
Methods inherited from class org.json.JSONTokener
back, dehexchar, end, more, next, next, next, nextClean, nextString, nextTo, nextTo, nextValue, skipTo, syntaxError, toString
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+HTTPTokener

+
+public HTTPTokener(java.lang.String string)
+
+
Construct an HTTPTokener from a string. +

+

+
Parameters:
string - A source string.
+
+ + + + + + + + +
+Method Detail
+ +

+nextToken

+
+public java.lang.String nextToken()
+                           throws JSONException
+
+
Get the next token or string. This is used in parsing HTTP headers. +

+

+ +
Returns:
A String. +
Throws: +
JSONException
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+processing library json4processing by Andreas Goransson. (c) 2011 + + diff --git a/distribution/json4processing-0.1.3/reference/org/json/JSONArray.html b/distribution/json4processing-0.1.3/reference/org/json/JSONArray.html new file mode 100644 index 000000000..090a15bae --- /dev/null +++ b/distribution/json4processing-0.1.3/reference/org/json/JSONArray.html @@ -0,0 +1,1463 @@ + + + + + + +JSONArray (Javadocs: json4processing) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.json +
+Class JSONArray

+
+java.lang.Object
+  extended by org.json.JSONArray
+
+
+
+
public class JSONArray
extends java.lang.Object
+ + +

+A JSONArray is an ordered sequence of values. Its external text form is a + string wrapped in square brackets with commas separating the values. The + internal form is an object having get and opt + methods for accessing the values by index, and put methods for + adding or replacing values. The values can be any of these types: + Boolean, JSONArray, JSONObject, + Number, String, or the + JSONObject.NULL object. +

+ The constructor can convert a JSON text into a Java object. The + toString method converts to JSON text. +

+ A get method returns a value if one can be found, and throws an + exception if one cannot be found. An opt method returns a + default value instead of throwing an exception, and so is useful for + obtaining optional values. +

+ The generic get() and opt() methods return an + object which you can cast or query for type. There are also typed + get and opt methods that do type checking and type + coercion for you. +

+ The texts produced by the toString methods strictly conform to + JSON syntax rules. The constructors are more forgiving in the texts they will + accept: +

    +
  • An extra , (comma) may appear just + before the closing bracket.
  • +
  • The null value will be inserted when there + is , (comma) elision.
  • +
  • Strings may be quoted with ' (single + quote).
  • +
  • Strings do not need to be quoted at all if they do not begin with a quote + or single quote, and if they do not contain leading or trailing spaces, + and if they do not contain any of these characters: + { } [ ] / \ : , = ; # and if they do not look like numbers + and if they are not the reserved words true, + false, or null.
  • +
  • Values can be separated by ; (semicolon) as + well as by , (comma).
  • +
  • Numbers may have the + 0x- (hex) prefix.
  • +
+

+ +

+

+
Author:
+
JSON.org
+
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + +
+Constructor Summary
JSONArray() + +
+          Construct an empty JSONArray.
JSONArray(java.util.Collection collection) + +
+          Construct a JSONArray from a Collection.
JSONArray(JSONTokener x) + +
+          Construct a JSONArray from a JSONTokener.
JSONArray(java.lang.Object array) + +
+          Construct a JSONArray from an array
JSONArray(java.lang.String source) + +
+          Construct a JSONArray from a source JSON text.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ java.lang.Objectget(int index) + +
+          Get the object value associated with an index.
+ booleangetBoolean(int index) + +
+          Get the boolean value associated with an index.
+ doublegetDouble(int index) + +
+          Get the double value associated with an index.
+ intgetInt(int index) + +
+          Get the int value associated with an index.
+ JSONArraygetJSONArray(int index) + +
+          Get the JSONArray associated with an index.
+ JSONObjectgetJSONObject(int index) + +
+          Get the JSONObject associated with an index.
+ longgetLong(int index) + +
+          Get the long value associated with an index.
+ java.lang.StringgetString(int index) + +
+          Get the string associated with an index.
+ booleanisNull(int index) + +
+          Determine if the value is null.
+ java.lang.Stringjoin(java.lang.String separator) + +
+          Make a string from the contents of this JSONArray.
+ intlength() + +
+          Get the number of elements in the JSONArray, included nulls.
+ java.lang.Objectopt(int index) + +
+          Get the optional object value associated with an index.
+ booleanoptBoolean(int index) + +
+          Get the optional boolean value associated with an index.
+ booleanoptBoolean(int index, + boolean defaultValue) + +
+          Get the optional boolean value associated with an index.
+ doubleoptDouble(int index) + +
+          Get the optional double value associated with an index.
+ doubleoptDouble(int index, + double defaultValue) + +
+          Get the optional double value associated with an index.
+ intoptInt(int index) + +
+          Get the optional int value associated with an index.
+ intoptInt(int index, + int defaultValue) + +
+          Get the optional int value associated with an index.
+ JSONArrayoptJSONArray(int index) + +
+          Get the optional JSONArray associated with an index.
+ JSONObjectoptJSONObject(int index) + +
+          Get the optional JSONObject associated with an index.
+ longoptLong(int index) + +
+          Get the optional long value associated with an index.
+ longoptLong(int index, + long defaultValue) + +
+          Get the optional long value associated with an index.
+ java.lang.StringoptString(int index) + +
+          Get the optional string value associated with an index.
+ java.lang.StringoptString(int index, + java.lang.String defaultValue) + +
+          Get the optional string associated with an index.
+ JSONArrayput(boolean value) + +
+          Append a boolean value.
+ JSONArrayput(java.util.Collection value) + +
+          Put a value in the JSONArray, where the value will be a + JSONArray which is produced from a Collection.
+ JSONArrayput(double value) + +
+          Append a double value.
+ JSONArrayput(int value) + +
+          Append an int value.
+ JSONArrayput(int index, + boolean value) + +
+          Put or replace a boolean value in the JSONArray.
+ JSONArrayput(int index, + java.util.Collection value) + +
+          Put a value in the JSONArray, where the value will be a + JSONArray which is produced from a Collection.
+ JSONArrayput(int index, + double value) + +
+          Put or replace a double value.
+ JSONArrayput(int index, + int value) + +
+          Put or replace an int value.
+ JSONArrayput(int index, + long value) + +
+          Put or replace a long value.
+ JSONArrayput(int index, + java.util.Map value) + +
+          Put a value in the JSONArray, where the value will be a + JSONObject that is produced from a Map.
+ JSONArrayput(int index, + java.lang.Object value) + +
+          Put or replace an object value in the JSONArray.
+ JSONArrayput(long value) + +
+          Append an long value.
+ JSONArrayput(java.util.Map value) + +
+          Put a value in the JSONArray, where the value will be a + JSONObject which is produced from a Map.
+ JSONArrayput(java.lang.Object value) + +
+          Append an object value.
+ java.lang.Objectremove(int index) + +
+          Remove an index and close the hole.
+ JSONObjecttoJSONObject(JSONArray names) + +
+          Produce a JSONObject by combining a JSONArray of names with the values + of this JSONArray.
+ java.lang.StringtoString() + +
+          Make a JSON text of this JSONArray.
+ java.lang.StringtoString(int indentFactor) + +
+          Make a prettyprinted JSON text of this JSONArray.
+ java.io.Writerwrite(java.io.Writer writer) + +
+          Write the contents of the JSONArray as JSON text to a writer.
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+JSONArray

+
+public JSONArray()
+
+
Construct an empty JSONArray. +

+

+
+ +

+JSONArray

+
+public JSONArray(JSONTokener x)
+          throws JSONException
+
+
Construct a JSONArray from a JSONTokener. +

+

+
Parameters:
x - A JSONTokener +
Throws: +
JSONException - If there is a syntax error.
+
+
+ +

+JSONArray

+
+public JSONArray(java.lang.String source)
+          throws JSONException
+
+
Construct a JSONArray from a source JSON text. +

+

+
Parameters:
source - A string that begins with + [ (left bracket) + and ends with ] (right bracket). +
Throws: +
JSONException - If there is a syntax error.
+
+
+ +

+JSONArray

+
+public JSONArray(java.util.Collection collection)
+
+
Construct a JSONArray from a Collection. +

+

+
Parameters:
collection - A Collection.
+
+
+ +

+JSONArray

+
+public JSONArray(java.lang.Object array)
+
+
Construct a JSONArray from an array +

+

+ +
Throws: +
JSONException - If not an array.
+
+ + + + + + + + +
+Method Detail
+ +

+get

+
+public java.lang.Object get(int index)
+                     throws JSONException
+
+
Get the object value associated with an index. +

+

+
Parameters:
index - The index must be between 0 and length() - 1. +
Returns:
An object value. +
Throws: +
JSONException - If there is no value for the index.
+
+
+
+ +

+getBoolean

+
+public boolean getBoolean(int index)
+                   throws JSONException
+
+
Get the boolean value associated with an index. + The string values "true" and "false" are converted to boolean. +

+

+
Parameters:
index - The index must be between 0 and length() - 1. +
Returns:
The truth. +
Throws: +
JSONException - If there is no value for the index or if the + value is not convertible to boolean.
+
+
+
+ +

+getDouble

+
+public double getDouble(int index)
+                 throws JSONException
+
+
Get the double value associated with an index. +

+

+
Parameters:
index - The index must be between 0 and length() - 1. +
Returns:
The value. +
Throws: +
JSONException - If the key is not found or if the value cannot + be converted to a number.
+
+
+
+ +

+getInt

+
+public int getInt(int index)
+           throws JSONException
+
+
Get the int value associated with an index. +

+

+
Parameters:
index - The index must be between 0 and length() - 1. +
Returns:
The value. +
Throws: +
JSONException - If the key is not found or if the value is not a number.
+
+
+
+ +

+getJSONArray

+
+public JSONArray getJSONArray(int index)
+                       throws JSONException
+
+
Get the JSONArray associated with an index. +

+

+
Parameters:
index - The index must be between 0 and length() - 1. +
Returns:
A JSONArray value. +
Throws: +
JSONException - If there is no value for the index. or if the + value is not a JSONArray
+
+
+
+ +

+getJSONObject

+
+public JSONObject getJSONObject(int index)
+                         throws JSONException
+
+
Get the JSONObject associated with an index. +

+

+
Parameters:
index - subscript +
Returns:
A JSONObject value. +
Throws: +
JSONException - If there is no value for the index or if the + value is not a JSONObject
+
+
+
+ +

+getLong

+
+public long getLong(int index)
+             throws JSONException
+
+
Get the long value associated with an index. +

+

+
Parameters:
index - The index must be between 0 and length() - 1. +
Returns:
The value. +
Throws: +
JSONException - If the key is not found or if the value cannot + be converted to a number.
+
+
+
+ +

+getString

+
+public java.lang.String getString(int index)
+                           throws JSONException
+
+
Get the string associated with an index. +

+

+
Parameters:
index - The index must be between 0 and length() - 1. +
Returns:
A string value. +
Throws: +
JSONException - If there is no string value for the index.
+
+
+
+ +

+isNull

+
+public boolean isNull(int index)
+
+
Determine if the value is null. +

+

+
Parameters:
index - The index must be between 0 and length() - 1. +
Returns:
true if the value at the index is null, or if there is no value.
+
+
+
+ +

+join

+
+public java.lang.String join(java.lang.String separator)
+                      throws JSONException
+
+
Make a string from the contents of this JSONArray. The + separator string is inserted between each element. + Warning: This method assumes that the data structure is acyclical. +

+

+
Parameters:
separator - A string that will be inserted between the elements. +
Returns:
a string. +
Throws: +
JSONException - If the array contains an invalid number.
+
+
+
+ +

+length

+
+public int length()
+
+
Get the number of elements in the JSONArray, included nulls. +

+

+ +
Returns:
The length (or size).
+
+
+
+ +

+opt

+
+public java.lang.Object opt(int index)
+
+
Get the optional object value associated with an index. +

+

+
Parameters:
index - The index must be between 0 and length() - 1. +
Returns:
An object value, or null if there is no + object at that index.
+
+
+
+ +

+optBoolean

+
+public boolean optBoolean(int index)
+
+
Get the optional boolean value associated with an index. + It returns false if there is no value at that index, + or if the value is not Boolean.TRUE or the String "true". +

+

+
Parameters:
index - The index must be between 0 and length() - 1. +
Returns:
The truth.
+
+
+
+ +

+optBoolean

+
+public boolean optBoolean(int index,
+                          boolean defaultValue)
+
+
Get the optional boolean value associated with an index. + It returns the defaultValue if there is no value at that index or if + it is not a Boolean or the String "true" or "false" (case insensitive). +

+

+
Parameters:
index - The index must be between 0 and length() - 1.
defaultValue - A boolean default. +
Returns:
The truth.
+
+
+
+ +

+optDouble

+
+public double optDouble(int index)
+
+
Get the optional double value associated with an index. + NaN is returned if there is no value for the index, + or if the value is not a number and cannot be converted to a number. +

+

+
Parameters:
index - The index must be between 0 and length() - 1. +
Returns:
The value.
+
+
+
+ +

+optDouble

+
+public double optDouble(int index,
+                        double defaultValue)
+
+
Get the optional double value associated with an index. + The defaultValue is returned if there is no value for the index, + or if the value is not a number and cannot be converted to a number. +

+

+
Parameters:
index - subscript
defaultValue - The default value. +
Returns:
The value.
+
+
+
+ +

+optInt

+
+public int optInt(int index)
+
+
Get the optional int value associated with an index. + Zero is returned if there is no value for the index, + or if the value is not a number and cannot be converted to a number. +

+

+
Parameters:
index - The index must be between 0 and length() - 1. +
Returns:
The value.
+
+
+
+ +

+optInt

+
+public int optInt(int index,
+                  int defaultValue)
+
+
Get the optional int value associated with an index. + The defaultValue is returned if there is no value for the index, + or if the value is not a number and cannot be converted to a number. +

+

+
Parameters:
index - The index must be between 0 and length() - 1.
defaultValue - The default value. +
Returns:
The value.
+
+
+
+ +

+optJSONArray

+
+public JSONArray optJSONArray(int index)
+
+
Get the optional JSONArray associated with an index. +

+

+
Parameters:
index - subscript +
Returns:
A JSONArray value, or null if the index has no value, + or if the value is not a JSONArray.
+
+
+
+ +

+optJSONObject

+
+public JSONObject optJSONObject(int index)
+
+
Get the optional JSONObject associated with an index. + Null is returned if the key is not found, or null if the index has + no value, or if the value is not a JSONObject. +

+

+
Parameters:
index - The index must be between 0 and length() - 1. +
Returns:
A JSONObject value.
+
+
+
+ +

+optLong

+
+public long optLong(int index)
+
+
Get the optional long value associated with an index. + Zero is returned if there is no value for the index, + or if the value is not a number and cannot be converted to a number. +

+

+
Parameters:
index - The index must be between 0 and length() - 1. +
Returns:
The value.
+
+
+
+ +

+optLong

+
+public long optLong(int index,
+                    long defaultValue)
+
+
Get the optional long value associated with an index. + The defaultValue is returned if there is no value for the index, + or if the value is not a number and cannot be converted to a number. +

+

+
Parameters:
index - The index must be between 0 and length() - 1.
defaultValue - The default value. +
Returns:
The value.
+
+
+
+ +

+optString

+
+public java.lang.String optString(int index)
+
+
Get the optional string value associated with an index. It returns an + empty string if there is no value at that index. If the value + is not a string and is not null, then it is coverted to a string. +

+

+
Parameters:
index - The index must be between 0 and length() - 1. +
Returns:
A String value.
+
+
+
+ +

+optString

+
+public java.lang.String optString(int index,
+                                  java.lang.String defaultValue)
+
+
Get the optional string associated with an index. + The defaultValue is returned if the key is not found. +

+

+
Parameters:
index - The index must be between 0 and length() - 1.
defaultValue - The default value. +
Returns:
A String value.
+
+
+
+ +

+put

+
+public JSONArray put(boolean value)
+
+
Append a boolean value. This increases the array's length by one. +

+

+
Parameters:
value - A boolean value. +
Returns:
this.
+
+
+
+ +

+put

+
+public JSONArray put(java.util.Collection value)
+
+
Put a value in the JSONArray, where the value will be a + JSONArray which is produced from a Collection. +

+

+
Parameters:
value - A Collection value. +
Returns:
this.
+
+
+
+ +

+put

+
+public JSONArray put(double value)
+
+
Append a double value. This increases the array's length by one. +

+

+
Parameters:
value - A double value. +
Returns:
this. +
Throws: +
JSONException - if the value is not finite.
+
+
+
+ +

+put

+
+public JSONArray put(int value)
+
+
Append an int value. This increases the array's length by one. +

+

+
Parameters:
value - An int value. +
Returns:
this.
+
+
+
+ +

+put

+
+public JSONArray put(long value)
+
+
Append an long value. This increases the array's length by one. +

+

+
Parameters:
value - A long value. +
Returns:
this.
+
+
+
+ +

+put

+
+public JSONArray put(java.util.Map value)
+
+
Put a value in the JSONArray, where the value will be a + JSONObject which is produced from a Map. +

+

+
Parameters:
value - A Map value. +
Returns:
this.
+
+
+
+ +

+put

+
+public JSONArray put(java.lang.Object value)
+
+
Append an object value. This increases the array's length by one. +

+

+
Parameters:
value - An object value. The value should be a + Boolean, Double, Integer, JSONArray, JSONObject, Long, or String, or the + JSONObject.NULL object. +
Returns:
this.
+
+
+
+ +

+put

+
+public JSONArray put(int index,
+                     boolean value)
+
+
Put or replace a boolean value in the JSONArray. If the index is greater + than the length of the JSONArray, then null elements will be added as + necessary to pad it out. +

+

+
Parameters:
index - The subscript.
value - A boolean value. +
Returns:
this. +
Throws: +
JSONException - If the index is negative.
+
+
+
+ +

+put

+
+public JSONArray put(int index,
+                     java.util.Collection value)
+
+
Put a value in the JSONArray, where the value will be a + JSONArray which is produced from a Collection. +

+

+
Parameters:
index - The subscript.
value - A Collection value. +
Returns:
this. +
Throws: +
JSONException - If the index is negative or if the value is + not finite.
+
+
+
+ +

+put

+
+public JSONArray put(int index,
+                     double value)
+
+
Put or replace a double value. If the index is greater than the length of + the JSONArray, then null elements will be added as necessary to pad + it out. +

+

+
Parameters:
index - The subscript.
value - A double value. +
Returns:
this. +
Throws: +
JSONException - If the index is negative or if the value is + not finite.
+
+
+
+ +

+put

+
+public JSONArray put(int index,
+                     int value)
+
+
Put or replace an int value. If the index is greater than the length of + the JSONArray, then null elements will be added as necessary to pad + it out. +

+

+
Parameters:
index - The subscript.
value - An int value. +
Returns:
this. +
Throws: +
JSONException - If the index is negative.
+
+
+
+ +

+put

+
+public JSONArray put(int index,
+                     long value)
+
+
Put or replace a long value. If the index is greater than the length of + the JSONArray, then null elements will be added as necessary to pad + it out. +

+

+
Parameters:
index - The subscript.
value - A long value. +
Returns:
this. +
Throws: +
JSONException - If the index is negative.
+
+
+
+ +

+put

+
+public JSONArray put(int index,
+                     java.util.Map value)
+
+
Put a value in the JSONArray, where the value will be a + JSONObject that is produced from a Map. +

+

+
Parameters:
index - The subscript.
value - The Map value. +
Returns:
this. +
Throws: +
JSONException - If the index is negative or if the the value is + an invalid number.
+
+
+
+ +

+put

+
+public JSONArray put(int index,
+                     java.lang.Object value)
+
+
Put or replace an object value in the JSONArray. If the index is greater + than the length of the JSONArray, then null elements will be added as + necessary to pad it out. +

+

+
Parameters:
index - The subscript.
value - The value to put into the array. The value should be a + Boolean, Double, Integer, JSONArray, JSONObject, Long, or String, or the + JSONObject.NULL object. +
Returns:
this. +
Throws: +
JSONException - If the index is negative or if the the value is + an invalid number.
+
+
+
+ +

+remove

+
+public java.lang.Object remove(int index)
+
+
Remove an index and close the hole. +

+

+
Parameters:
index - The index of the element to be removed. +
Returns:
The value that was associated with the index, + or null if there was no value.
+
+
+
+ +

+toJSONObject

+
+public JSONObject toJSONObject(JSONArray names)
+                        throws JSONException
+
+
Produce a JSONObject by combining a JSONArray of names with the values + of this JSONArray. +

+

+
Parameters:
names - A JSONArray containing a list of key strings. These will be + paired with the values. +
Returns:
A JSONObject, or null if there are no names or if this JSONArray + has no values. +
Throws: +
JSONException - If any of the names are null.
+
+
+
+ +

+toString

+
+public java.lang.String toString()
+
+
Make a JSON text of this JSONArray. For compactness, no + unnecessary whitespace is added. If it is not possible to produce a + syntactically correct JSON text then null will be returned instead. This + could occur if the array contains an invalid number. +

+ Warning: This method assumes that the data structure is acyclical. +

+

+
Overrides:
toString in class java.lang.Object
+
+
+ +
Returns:
a printable, displayable, transmittable + representation of the array.
+
+
+
+ +

+toString

+
+public java.lang.String toString(int indentFactor)
+                          throws JSONException
+
+
Make a prettyprinted JSON text of this JSONArray. + Warning: This method assumes that the data structure is acyclical. +

+

+
Parameters:
indentFactor - The number of spaces to add to each level of + indentation. +
Returns:
a printable, displayable, transmittable + representation of the object, beginning + with [ (left bracket) and ending + with ] (right bracket). +
Throws: +
JSONException
+
+
+
+ +

+write

+
+public java.io.Writer write(java.io.Writer writer)
+
+
Write the contents of the JSONArray as JSON text to a writer. + For compactness, no whitespace is added. +

+ Warning: This method assumes that the data structure is acyclical. +

+

+ +
Returns:
The writer. +
Throws: +
JSONException
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+processing library json4processing by Andreas Goransson. (c) 2011 + + diff --git a/distribution/json4processing-0.1.3/reference/org/json/JSONException.html b/distribution/json4processing-0.1.3/reference/org/json/JSONException.html new file mode 100644 index 000000000..15652b3cd --- /dev/null +++ b/distribution/json4processing-0.1.3/reference/org/json/JSONException.html @@ -0,0 +1,291 @@ + + + + + + +JSONException (Javadocs: json4processing) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.json +
+Class JSONException

+
+java.lang.Object
+  extended by java.lang.Throwable
+      extended by java.lang.Exception
+          extended by org.json.JSONException
+
+
+
All Implemented Interfaces:
java.io.Serializable
+
+
+
+
public class JSONException
extends java.lang.Exception
+ + +

+The JSONException is thrown by the JSON.org classes when things are amiss. +

+ +

+

+
Author:
+
JSON.org
+
See Also:
Serialized Form
+
+ +

+ + + + + + + + + + + + + + +
+Constructor Summary
JSONException(java.lang.String message) + +
+          Constructs a JSONException with an explanatory message.
JSONException(java.lang.Throwable cause) + +
+           
+  + + + + + + + + + + + +
+Method Summary
+ java.lang.ThrowablegetCause() + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Throwable
fillInStackTrace, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+JSONException

+
+public JSONException(java.lang.String message)
+
+
Constructs a JSONException with an explanatory message. +

+

+
Parameters:
message - Detail about the reason for the exception.
+
+
+ +

+JSONException

+
+public JSONException(java.lang.Throwable cause)
+
+
+ + + + + + + + +
+Method Detail
+ +

+getCause

+
+public java.lang.Throwable getCause()
+
+
+
Overrides:
getCause in class java.lang.Throwable
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+processing library json4processing by Andreas Goransson. (c) 2011 + + diff --git a/distribution/json4processing-0.1.3/reference/org/json/JSONML.html b/distribution/json4processing-0.1.3/reference/org/json/JSONML.html new file mode 100644 index 000000000..353ed4d7d --- /dev/null +++ b/distribution/json4processing-0.1.3/reference/org/json/JSONML.html @@ -0,0 +1,422 @@ + + + + + + +JSONML (Javadocs: json4processing) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.json +
+Class JSONML

+
+java.lang.Object
+  extended by org.json.JSONML
+
+
+
+
public class JSONML
extends java.lang.Object
+ + +

+This provides static methods to convert an XML text into a JSONArray or + JSONObject, and to covert a JSONArray or JSONObject into an XML text using + the JsonML transform. +

+ +

+

+
Author:
+
JSON.org
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
JSONML() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+static JSONArraytoJSONArray(java.lang.String string) + +
+          Convert a well-formed (but not necessarily valid) XML string into a + JSONArray using the JsonML transform.
+static JSONArraytoJSONArray(XMLTokener x) + +
+          Convert a well-formed (but not necessarily valid) XML string into a + JSONArray using the JsonML transform.
+static JSONObjecttoJSONObject(java.lang.String string) + +
+          Convert a well-formed (but not necessarily valid) XML string into a + JSONObject using the JsonML transform.
+static JSONObjecttoJSONObject(XMLTokener x) + +
+          Convert a well-formed (but not necessarily valid) XML string into a + JSONObject using the JsonML transform.
+static java.lang.StringtoString(JSONArray ja) + +
+          Reverse the JSONML transformation, making an XML text from a JSONArray.
+static java.lang.StringtoString(JSONObject jo) + +
+          Reverse the JSONML transformation, making an XML text from a JSONObject.
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+JSONML

+
+public JSONML()
+
+
+ + + + + + + + +
+Method Detail
+ +

+toJSONArray

+
+public static JSONArray toJSONArray(java.lang.String string)
+                             throws JSONException
+
+
Convert a well-formed (but not necessarily valid) XML string into a + JSONArray using the JsonML transform. Each XML tag is represented as + a JSONArray in which the first element is the tag name. If the tag has + attributes, then the second element will be JSONObject containing the + name/value pairs. If the tag contains children, then strings and + JSONArrays will represent the child tags. + Comments, prologs, DTDs, and <[ [ ]]> are ignored. +

+

+
Parameters:
string - The source string. +
Returns:
A JSONArray containing the structured data from the XML string. +
Throws: +
JSONException
+
+
+
+ +

+toJSONArray

+
+public static JSONArray toJSONArray(XMLTokener x)
+                             throws JSONException
+
+
Convert a well-formed (but not necessarily valid) XML string into a + JSONArray using the JsonML transform. Each XML tag is represented as + a JSONArray in which the first element is the tag name. If the tag has + attributes, then the second element will be JSONObject containing the + name/value pairs. If the tag contains children, then strings and + JSONArrays will represent the child content and tags. + Comments, prologs, DTDs, and <[ [ ]]> are ignored. +

+

+
Parameters:
x - An XMLTokener. +
Returns:
A JSONArray containing the structured data from the XML string. +
Throws: +
JSONException
+
+
+
+ +

+toJSONObject

+
+public static JSONObject toJSONObject(XMLTokener x)
+                               throws JSONException
+
+
Convert a well-formed (but not necessarily valid) XML string into a + JSONObject using the JsonML transform. Each XML tag is represented as + a JSONObject with a "tagName" property. If the tag has attributes, then + the attributes will be in the JSONObject as properties. If the tag + contains children, the object will have a "childNodes" property which + will be an array of strings and JsonML JSONObjects. + + Comments, prologs, DTDs, and <[ [ ]]> are ignored. +

+

+
Parameters:
x - An XMLTokener of the XML source text. +
Returns:
A JSONObject containing the structured data from the XML string. +
Throws: +
JSONException
+
+
+
+ +

+toJSONObject

+
+public static JSONObject toJSONObject(java.lang.String string)
+                               throws JSONException
+
+
Convert a well-formed (but not necessarily valid) XML string into a + JSONObject using the JsonML transform. Each XML tag is represented as + a JSONObject with a "tagName" property. If the tag has attributes, then + the attributes will be in the JSONObject as properties. If the tag + contains children, the object will have a "childNodes" property which + will be an array of strings and JsonML JSONObjects. + + Comments, prologs, DTDs, and <[ [ ]]> are ignored. +

+

+
Parameters:
string - The XML source text. +
Returns:
A JSONObject containing the structured data from the XML string. +
Throws: +
JSONException
+
+
+
+ +

+toString

+
+public static java.lang.String toString(JSONArray ja)
+                                 throws JSONException
+
+
Reverse the JSONML transformation, making an XML text from a JSONArray. +

+

+
Parameters:
ja - A JSONArray. +
Returns:
An XML string. +
Throws: +
JSONException
+
+
+
+ +

+toString

+
+public static java.lang.String toString(JSONObject jo)
+                                 throws JSONException
+
+
Reverse the JSONML transformation, making an XML text from a JSONObject. + The JSONObject must contain a "tagName" property. If it has children, + then it must have a "childNodes" property containing an array of objects. + The other properties are attributes with string values. +

+

+
Parameters:
jo - A JSONObject. +
Returns:
An XML string. +
Throws: +
JSONException
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+processing library json4processing by Andreas Goransson. (c) 2011 + + diff --git a/distribution/json4processing-0.1.3/reference/org/json/JSONObject.html b/distribution/json4processing-0.1.3/reference/org/json/JSONObject.html new file mode 100644 index 000000000..e0bbbbebe --- /dev/null +++ b/distribution/json4processing-0.1.3/reference/org/json/JSONObject.html @@ -0,0 +1,1847 @@ + + + + + + +JSONObject (Javadocs: json4processing) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.json +
+Class JSONObject

+
+java.lang.Object
+  extended by org.json.JSONObject
+
+
+
+
public class JSONObject
extends java.lang.Object
+ + +

+A JSONObject is an unordered collection of name/value pairs. Its external + form is a string wrapped in curly braces with colons between the names and + values, and commas between the values and names. The internal form is an + object having get and opt methods for accessing the + values by name, and put methods for adding or replacing values + by name. The values can be any of these types: Boolean, + JSONArray, JSONObject, Number, + String, or the JSONObject.NULL object. A JSONObject + constructor can be used to convert an external form JSON text into an + internal form whose values can be retrieved with the get and + opt methods, or to convert values into a JSON text using the + put and toString methods. A get method + returns a value if one can be found, and throws an exception if one cannot be + found. An opt method returns a default value instead of throwing + an exception, and so is useful for obtaining optional values. +

+ The generic get() and opt() methods return an + object, which you can cast or query for type. There are also typed + get and opt methods that do type checking and type + coercion for you. The opt methods differ from the get methods in that they do + not throw. Instead, they return a specified value, such as null. +

+ The put methods add or replace values in an object. For example, + +

+ myString = new JSONObject().put("JSON", "Hello, World!").toString();
+ 
+ + produces the string {"JSON": "Hello, World"}. +

+ The texts produced by the toString methods strictly conform to + the JSON syntax rules. The constructors are more forgiving in the texts they + will accept: +

    +
  • An extra , (comma) may appear just + before the closing brace.
  • +
  • Strings may be quoted with ' (single + quote).
  • +
  • Strings do not need to be quoted at all if they do not begin with a quote + or single quote, and if they do not contain leading or trailing spaces, and + if they do not contain any of these characters: + { } [ ] / \ : , = ; # and if they do not look like numbers and + if they are not the reserved words true, false, or + null.
  • +
  • Keys can be followed by = or => as well as by + :.
  • +
  • Values can be followed by ; (semicolon) as + well as by , (comma).
  • +
  • Numbers may have the 0x- (hex) prefix.
  • +
+

+ +

+

+
Author:
+
JSON.org
+
+
+ +

+ + + + + + + + + + + +
+Field Summary
+static java.lang.ObjectNULL + +
+          It is sometimes more convenient and less ambiguous to have a + NULL object than to use Java's null value.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Constructor Summary
JSONObject() + +
+          Construct an empty JSONObject.
JSONObject(JSONObject jo, + java.lang.String[] names) + +
+          Construct a JSONObject from a subset of another JSONObject.
JSONObject(JSONTokener x) + +
+          Construct a JSONObject from a JSONTokener.
JSONObject(java.util.Map map) + +
+          Construct a JSONObject from a Map.
JSONObject(java.lang.Object bean) + +
+          Construct a JSONObject from an Object using bean getters.
JSONObject(java.lang.Object object, + java.lang.String[] names) + +
+          Construct a JSONObject from an Object, using reflection to find the + public members.
JSONObject(java.lang.String source) + +
+          Construct a JSONObject from a source JSON text string.
JSONObject(java.lang.String baseName, + java.util.Locale locale) + +
+          Construct a JSONObject from a ResourceBundle.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ JSONObjectaccumulate(java.lang.String key, + java.lang.Object value) + +
+          Accumulate values under a key.
+ JSONObjectappend(java.lang.String key, + java.lang.Object value) + +
+          Append values to the array under a key.
+static java.lang.StringdoubleToString(double d) + +
+          Produce a string from a double.
+ java.lang.Objectget(java.lang.String key) + +
+          Get the value object associated with a key.
+ booleangetBoolean(java.lang.String key) + +
+          Get the boolean value associated with a key.
+ doublegetDouble(java.lang.String key) + +
+          Get the double value associated with a key.
+ intgetInt(java.lang.String key) + +
+          Get the int value associated with a key.
+ JSONArraygetJSONArray(java.lang.String key) + +
+          Get the JSONArray value associated with a key.
+ JSONObjectgetJSONObject(java.lang.String key) + +
+          Get the JSONObject value associated with a key.
+ longgetLong(java.lang.String key) + +
+          Get the long value associated with a key.
+static java.lang.String[]getNames(JSONObject jo) + +
+          Get an array of field names from a JSONObject.
+static java.lang.String[]getNames(java.lang.Object object) + +
+          Get an array of field names from an Object.
+ java.lang.StringgetString(java.lang.String key) + +
+          Get the string associated with a key.
+ booleanhas(java.lang.String key) + +
+          Determine if the JSONObject contains a specific key.
+ JSONObjectincrement(java.lang.String key) + +
+          Increment a property of a JSONObject.
+ booleanisNull(java.lang.String key) + +
+          Determine if the value associated with the key is null or if there is no + value.
+ java.util.Iteratorkeys() + +
+          Get an enumeration of the keys of the JSONObject.
+ intlength() + +
+          Get the number of keys stored in the JSONObject.
+ JSONArraynames() + +
+          Produce a JSONArray containing the names of the elements of this + JSONObject.
+static java.lang.StringnumberToString(java.lang.Number number) + +
+          Produce a string from a Number.
+ java.lang.Objectopt(java.lang.String key) + +
+          Get an optional value associated with a key.
+ booleanoptBoolean(java.lang.String key) + +
+          Get an optional boolean associated with a key.
+ booleanoptBoolean(java.lang.String key, + boolean defaultValue) + +
+          Get an optional boolean associated with a key.
+ doubleoptDouble(java.lang.String key) + +
+          Get an optional double associated with a key, or NaN if there is no such + key or if its value is not a number.
+ doubleoptDouble(java.lang.String key, + double defaultValue) + +
+          Get an optional double associated with a key, or the defaultValue if + there is no such key or if its value is not a number.
+ intoptInt(java.lang.String key) + +
+          Get an optional int value associated with a key, or zero if there is no + such key or if the value is not a number.
+ intoptInt(java.lang.String key, + int defaultValue) + +
+          Get an optional int value associated with a key, or the default if there + is no such key or if the value is not a number.
+ JSONArrayoptJSONArray(java.lang.String key) + +
+          Get an optional JSONArray associated with a key.
+ JSONObjectoptJSONObject(java.lang.String key) + +
+          Get an optional JSONObject associated with a key.
+ longoptLong(java.lang.String key) + +
+          Get an optional long value associated with a key, or zero if there is no + such key or if the value is not a number.
+ longoptLong(java.lang.String key, + long defaultValue) + +
+          Get an optional long value associated with a key, or the default if there + is no such key or if the value is not a number.
+ java.lang.StringoptString(java.lang.String key) + +
+          Get an optional string associated with a key.
+ java.lang.StringoptString(java.lang.String key, + java.lang.String defaultValue) + +
+          Get an optional string associated with a key.
+ JSONObjectput(java.lang.String key, + boolean value) + +
+          Put a key/boolean pair in the JSONObject.
+ JSONObjectput(java.lang.String key, + java.util.Collection value) + +
+          Put a key/value pair in the JSONObject, where the value will be a + JSONArray which is produced from a Collection.
+ JSONObjectput(java.lang.String key, + double value) + +
+          Put a key/double pair in the JSONObject.
+ JSONObjectput(java.lang.String key, + int value) + +
+          Put a key/int pair in the JSONObject.
+ JSONObjectput(java.lang.String key, + long value) + +
+          Put a key/long pair in the JSONObject.
+ JSONObjectput(java.lang.String key, + java.util.Map value) + +
+          Put a key/value pair in the JSONObject, where the value will be a + JSONObject which is produced from a Map.
+ JSONObjectput(java.lang.String key, + java.lang.Object value) + +
+          Put a key/value pair in the JSONObject.
+ JSONObjectputOnce(java.lang.String key, + java.lang.Object value) + +
+          Put a key/value pair in the JSONObject, but only if the key and the value + are both non-null, and only if there is not already a member with that + name.
+ JSONObjectputOpt(java.lang.String key, + java.lang.Object value) + +
+          Put a key/value pair in the JSONObject, but only if the key and the value + are both non-null.
+static java.lang.Stringquote(java.lang.String string) + +
+          Produce a string in double quotes with backslash sequences in all the + right places.
+ java.lang.Objectremove(java.lang.String key) + +
+          Remove a name and its value, if present.
+static java.lang.ObjectstringToValue(java.lang.String string) + +
+          Try to convert a string into a number, boolean, or null.
+static voidtestValidity(java.lang.Object o) + +
+          Throw an exception if the object is a NaN or infinite number.
+ JSONArraytoJSONArray(JSONArray names) + +
+          Produce a JSONArray containing the values of the members of this + JSONObject.
+ java.lang.StringtoString() + +
+          Make a JSON text of this JSONObject.
+ java.lang.StringtoString(int indentFactor) + +
+          Make a prettyprinted JSON text of this JSONObject.
+static java.lang.StringvalueToString(java.lang.Object value) + +
+          Make a JSON text of an Object value.
+static java.lang.Objectwrap(java.lang.Object object) + +
+          Wrap an object, if necessary.
+ java.io.Writerwrite(java.io.Writer writer) + +
+          Write the contents of the JSONObject as JSON text to a writer.
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+NULL

+
+public static final java.lang.Object NULL
+
+
It is sometimes more convenient and less ambiguous to have a + NULL object than to use Java's null value. + JSONObject.NULL.equals(null) returns true. + JSONObject.NULL.toString() returns "null". +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+JSONObject

+
+public JSONObject()
+
+
Construct an empty JSONObject. +

+

+
+ +

+JSONObject

+
+public JSONObject(JSONObject jo,
+                  java.lang.String[] names)
+
+
Construct a JSONObject from a subset of another JSONObject. An array of + strings is used to identify the keys that should be copied. Missing keys + are ignored. +

+

+
Parameters:
jo - A JSONObject.
names - An array of strings. +
Throws: +
JSONException +
JSONException - If a value is a non-finite number or if a name is + duplicated.
+
+
+ +

+JSONObject

+
+public JSONObject(JSONTokener x)
+
+
Construct a JSONObject from a JSONTokener. +

+

+
Parameters:
x - A JSONTokener object containing the source string. +
Throws: +
JSONException - If there is a syntax error in the source string or a + duplicated key.
+
+
+ +

+JSONObject

+
+public JSONObject(java.util.Map map)
+
+
Construct a JSONObject from a Map. +

+

+
Parameters:
map - A map object that can be used to initialize the contents of + the JSONObject. +
Throws: +
JSONException
+
+
+ +

+JSONObject

+
+public JSONObject(java.lang.Object bean)
+
+
Construct a JSONObject from an Object using bean getters. It reflects on + all of the public methods of the object. For each of the methods with no + parameters and a name starting with "get" or + "is" followed by an uppercase letter, the method is invoked, + and a key and the value returned from the getter method are put into the + new JSONObject. + + The key is formed by removing the "get" or "is" + prefix. If the second remaining character is not upper case, then the + first character is converted to lower case. + + For example, if an object has a method named "getName", and + if the result of calling object.getName() is + "Larry Fine", then the JSONObject will contain + "name": "Larry Fine". +

+

+
Parameters:
bean - An object that has getter methods that should be used to make + a JSONObject.
+
+
+ +

+JSONObject

+
+public JSONObject(java.lang.Object object,
+                  java.lang.String[] names)
+
+
Construct a JSONObject from an Object, using reflection to find the + public members. The resulting JSONObject's keys will be the strings from + the names array, and the values will be the field values associated with + those keys in the object. If a key is not found or not visible, then it + will not be copied into the new JSONObject. +

+

+
Parameters:
object - An object that has fields that should be used to make a + JSONObject.
names - An array of strings, the names of the fields to be obtained + from the object.
+
+
+ +

+JSONObject

+
+public JSONObject(java.lang.String source)
+
+
Construct a JSONObject from a source JSON text string. This is the most + commonly used JSONObject constructor. +

+

+
Parameters:
source - A string beginning with { (left + brace) and ending with } +  (right brace). +
Throws: +
JSONException - If there is a syntax error in the source string or a + duplicated key.
+
+
+ +

+JSONObject

+
+public JSONObject(java.lang.String baseName,
+                  java.util.Locale locale)
+
+
Construct a JSONObject from a ResourceBundle. +

+

+
Parameters:
baseName - The ResourceBundle base name.
locale - The Locale to load the ResourceBundle for. +
Throws: +
JSONException - If any JSONExceptions are detected.
+
+ + + + + + + + +
+Method Detail
+ +

+accumulate

+
+public JSONObject accumulate(java.lang.String key,
+                             java.lang.Object value)
+
+
Accumulate values under a key. It is similar to the put method except + that if there is already an object stored under the key then a JSONArray + is stored under the key to hold all of the accumulated values. If there + is already a JSONArray, then the new value is appended to it. In + contrast, the put method replaces the previous value. + + If only one value is accumulated that is not a JSONArray, then the result + will be the same as using put. But if multiple values are accumulated, + then the result will be like append. +

+

+
Parameters:
key - A key string.
value - An object to be accumulated under the key. +
Returns:
this. +
Throws: +
JSONException - If the value is an invalid number or if the key is null.
+
+
+
+ +

+append

+
+public JSONObject append(java.lang.String key,
+                         java.lang.Object value)
+
+
Append values to the array under a key. If the key does not exist in the + JSONObject, then the key is put in the JSONObject with its value being a + JSONArray containing the value parameter. If the key was already + associated with a JSONArray, then the value parameter is appended to it. +

+

+
Parameters:
key - A key string.
value - An object to be accumulated under the key. +
Returns:
this. +
Throws: +
JSONException - If the key is null or if the current value associated with + the key is not a JSONArray.
+
+
+
+ +

+doubleToString

+
+public static java.lang.String doubleToString(double d)
+
+
Produce a string from a double. The string "null" will be returned if the + number is not finite. +

+

+
Parameters:
d - A double. +
Returns:
A String.
+
+
+
+ +

+get

+
+public java.lang.Object get(java.lang.String key)
+
+
Get the value object associated with a key. +

+

+
Parameters:
key - A key string. +
Returns:
The object associated with the key. +
Throws: +
JSONException - if the key is not found.
+
+
+
+ +

+getBoolean

+
+public boolean getBoolean(java.lang.String key)
+
+
Get the boolean value associated with a key. +

+

+
Parameters:
key - A key string. +
Returns:
The truth. (False if it failes to find the value) +
Throws: +
JSONException - if the value is not a Boolean or the String "true" or + "false".
+
+
+
+ +

+getDouble

+
+public double getDouble(java.lang.String key)
+
+
Get the double value associated with a key. +

+

+
Parameters:
key - A key string. +
Returns:
The numeric value. -1 if it failes to find the value +
Throws: +
JSONException - if the key is not found or if the value is not a Number + object and cannot be converted to a number.
+
+
+
+ +

+getInt

+
+public int getInt(java.lang.String key)
+
+
Get the int value associated with a key. +

+

+
Parameters:
key - A key string. +
Returns:
The integer value. (-1 if it failes to get the integer) +
Throws: +
JSONException - if the key is not found or if the value cannot be converted + to an integer.
+
+
+
+ +

+getJSONArray

+
+public JSONArray getJSONArray(java.lang.String key)
+
+
Get the JSONArray value associated with a key. +

+

+
Parameters:
key - A key string. +
Returns:
A JSONArray which is the value. (null if failes to find the array) +
Throws: +
JSONException - if the key is not found or if the value is not a JSONArray.
+
+
+
+ +

+getJSONObject

+
+public JSONObject getJSONObject(java.lang.String key)
+
+
Get the JSONObject value associated with a key. +

+

+
Parameters:
key - A key string. +
Returns:
A JSONObject which is the value. +
Throws: +
JSONException - if the key is not found or if the value is not a JSONObject.
+
+
+
+ +

+getLong

+
+public long getLong(java.lang.String key)
+
+
Get the long value associated with a key. +

+

+
Parameters:
key - A key string. +
Returns:
The long value. (-1 if it failes) +
Throws: +
JSONException - if the key is not found or if the value cannot be converted + to a long.
+
+
+
+ +

+getNames

+
+public static java.lang.String[] getNames(JSONObject jo)
+
+
Get an array of field names from a JSONObject. +

+

+ +
Returns:
An array of field names, or null if there are no names.
+
+
+
+ +

+getNames

+
+public static java.lang.String[] getNames(java.lang.Object object)
+
+
Get an array of field names from an Object. +

+

+ +
Returns:
An array of field names, or null if there are no names.
+
+
+
+ +

+getString

+
+public java.lang.String getString(java.lang.String key)
+
+
Get the string associated with a key. +

+

+
Parameters:
key - A key string. +
Returns:
A string which is the value. (empty string if it fails) +
Throws: +
JSONException - if there is no string value for the key.
+
+
+
+ +

+has

+
+public boolean has(java.lang.String key)
+
+
Determine if the JSONObject contains a specific key. +

+

+
Parameters:
key - A key string. +
Returns:
true if the key exists in the JSONObject.
+
+
+
+ +

+increment

+
+public JSONObject increment(java.lang.String key)
+
+
Increment a property of a JSONObject. If there is no such property, + create one with a value of 1. If there is such a property, and if it is + an Integer, Long, Double, or Float, then add one to it. +

+

+
Parameters:
key - A key string. +
Returns:
this. +
Throws: +
JSONException - If there is already a property with this name that is not an + Integer, Long, Double, or Float.
+
+
+
+ +

+isNull

+
+public boolean isNull(java.lang.String key)
+
+
Determine if the value associated with the key is null or if there is no + value. +

+

+
Parameters:
key - A key string. +
Returns:
true if there is no value associated with the key or if the value + is the JSONObject.NULL object.
+
+
+
+ +

+keys

+
+public java.util.Iterator keys()
+
+
Get an enumeration of the keys of the JSONObject. +

+

+ +
Returns:
An iterator of the keys.
+
+
+
+ +

+length

+
+public int length()
+
+
Get the number of keys stored in the JSONObject. +

+

+ +
Returns:
The number of keys in the JSONObject.
+
+
+
+ +

+names

+
+public JSONArray names()
+
+
Produce a JSONArray containing the names of the elements of this + JSONObject. +

+

+ +
Returns:
A JSONArray containing the key strings, or null if the JSONObject + is empty.
+
+
+
+ +

+numberToString

+
+public static java.lang.String numberToString(java.lang.Number number)
+
+
Produce a string from a Number. +

+

+
Parameters:
number - A Number +
Returns:
A String. +
Throws: +
JSONException - If n is a non-finite number.
+
+
+
+ +

+opt

+
+public java.lang.Object opt(java.lang.String key)
+
+
Get an optional value associated with a key. +

+

+
Parameters:
key - A key string. +
Returns:
An object which is the value, or null if there is no value.
+
+
+
+ +

+optBoolean

+
+public boolean optBoolean(java.lang.String key)
+
+
Get an optional boolean associated with a key. It returns false if there + is no such key, or if the value is not Boolean.TRUE or the String "true". +

+

+
Parameters:
key - A key string. +
Returns:
The truth.
+
+
+
+ +

+optBoolean

+
+public boolean optBoolean(java.lang.String key,
+                          boolean defaultValue)
+
+
Get an optional boolean associated with a key. It returns the + defaultValue if there is no such key, or if it is not a Boolean or the + String "true" or "false" (case insensitive). +

+

+
Parameters:
key - A key string.
defaultValue - The default. +
Returns:
The truth.
+
+
+
+ +

+optDouble

+
+public double optDouble(java.lang.String key)
+
+
Get an optional double associated with a key, or NaN if there is no such + key or if its value is not a number. If the value is a string, an attempt + will be made to evaluate it as a number. +

+

+
Parameters:
key - A string which is the key. +
Returns:
An object which is the value.
+
+
+
+ +

+optDouble

+
+public double optDouble(java.lang.String key,
+                        double defaultValue)
+
+
Get an optional double associated with a key, or the defaultValue if + there is no such key or if its value is not a number. If the value is a + string, an attempt will be made to evaluate it as a number. +

+

+
Parameters:
key - A key string.
defaultValue - The default. +
Returns:
An object which is the value.
+
+
+
+ +

+optInt

+
+public int optInt(java.lang.String key)
+
+
Get an optional int value associated with a key, or zero if there is no + such key or if the value is not a number. If the value is a string, an + attempt will be made to evaluate it as a number. +

+

+
Parameters:
key - A key string. +
Returns:
An object which is the value.
+
+
+
+ +

+optInt

+
+public int optInt(java.lang.String key,
+                  int defaultValue)
+
+
Get an optional int value associated with a key, or the default if there + is no such key or if the value is not a number. If the value is a string, + an attempt will be made to evaluate it as a number. +

+

+
Parameters:
key - A key string.
defaultValue - The default. +
Returns:
An object which is the value.
+
+
+
+ +

+optJSONArray

+
+public JSONArray optJSONArray(java.lang.String key)
+
+
Get an optional JSONArray associated with a key. It returns null if there + is no such key, or if its value is not a JSONArray. +

+

+
Parameters:
key - A key string. +
Returns:
A JSONArray which is the value.
+
+
+
+ +

+optJSONObject

+
+public JSONObject optJSONObject(java.lang.String key)
+
+
Get an optional JSONObject associated with a key. It returns null if + there is no such key, or if its value is not a JSONObject. +

+

+
Parameters:
key - A key string. +
Returns:
A JSONObject which is the value.
+
+
+
+ +

+optLong

+
+public long optLong(java.lang.String key)
+
+
Get an optional long value associated with a key, or zero if there is no + such key or if the value is not a number. If the value is a string, an + attempt will be made to evaluate it as a number. +

+

+
Parameters:
key - A key string. +
Returns:
An object which is the value.
+
+
+
+ +

+optLong

+
+public long optLong(java.lang.String key,
+                    long defaultValue)
+
+
Get an optional long value associated with a key, or the default if there + is no such key or if the value is not a number. If the value is a string, + an attempt will be made to evaluate it as a number. +

+

+
Parameters:
key - A key string.
defaultValue - The default. +
Returns:
An object which is the value.
+
+
+
+ +

+optString

+
+public java.lang.String optString(java.lang.String key)
+
+
Get an optional string associated with a key. It returns an empty string + if there is no such key. If the value is not a string and is not null, + then it is converted to a string. +

+

+
Parameters:
key - A key string. +
Returns:
A string which is the value.
+
+
+
+ +

+optString

+
+public java.lang.String optString(java.lang.String key,
+                                  java.lang.String defaultValue)
+
+
Get an optional string associated with a key. It returns the defaultValue + if there is no such key. +

+

+
Parameters:
key - A key string.
defaultValue - The default. +
Returns:
A string which is the value.
+
+
+
+ +

+put

+
+public JSONObject put(java.lang.String key,
+                      boolean value)
+
+
Put a key/boolean pair in the JSONObject. +

+

+
Parameters:
key - A key string.
value - A boolean which is the value. +
Returns:
this. +
Throws: +
JSONException - If the key is null.
+
+
+
+ +

+put

+
+public JSONObject put(java.lang.String key,
+                      java.util.Collection value)
+
+
Put a key/value pair in the JSONObject, where the value will be a + JSONArray which is produced from a Collection. +

+

+
Parameters:
key - A key string.
value - A Collection value. +
Returns:
this. +
Throws: +
JSONException
+
+
+
+ +

+put

+
+public JSONObject put(java.lang.String key,
+                      double value)
+
+
Put a key/double pair in the JSONObject. +

+

+
Parameters:
key - A key string.
value - A double which is the value. +
Returns:
this. +
Throws: +
JSONException - If the key is null or if the number is invalid.
+
+
+
+ +

+put

+
+public JSONObject put(java.lang.String key,
+                      int value)
+
+
Put a key/int pair in the JSONObject. +

+

+
Parameters:
key - A key string.
value - An int which is the value. +
Returns:
this. +
Throws: +
JSONException - If the key is null.
+
+
+
+ +

+put

+
+public JSONObject put(java.lang.String key,
+                      long value)
+
+
Put a key/long pair in the JSONObject. +

+

+
Parameters:
key - A key string.
value - A long which is the value. +
Returns:
this. +
Throws: +
JSONException - If the key is null.
+
+
+
+ +

+put

+
+public JSONObject put(java.lang.String key,
+                      java.util.Map value)
+
+
Put a key/value pair in the JSONObject, where the value will be a + JSONObject which is produced from a Map. +

+

+
Parameters:
key - A key string.
value - A Map value. +
Returns:
this. +
Throws: +
JSONException
+
+
+
+ +

+put

+
+public JSONObject put(java.lang.String key,
+                      java.lang.Object value)
+
+
Put a key/value pair in the JSONObject. If the value is null, then the + key will be removed from the JSONObject if it is present. +

+

+
Parameters:
key - A key string.
value - An object which is the value. It should be of one of these + types: Boolean, Double, Integer, JSONArray, JSONObject, Long, + String, or the JSONObject.NULL object. +
Returns:
this. +
Throws: +
JSONException - If the value is non-finite number or if the key is null.
+
+
+
+ +

+putOnce

+
+public JSONObject putOnce(java.lang.String key,
+                          java.lang.Object value)
+
+
Put a key/value pair in the JSONObject, but only if the key and the value + are both non-null, and only if there is not already a member with that + name. +

+

+
Parameters:
key -
value - +
Returns:
his. +
Throws: +
JSONException - if the key is a duplicate
+
+
+
+ +

+putOpt

+
+public JSONObject putOpt(java.lang.String key,
+                         java.lang.Object value)
+
+
Put a key/value pair in the JSONObject, but only if the key and the value + are both non-null. +

+

+
Parameters:
key - A key string.
value - An object which is the value. It should be of one of these + types: Boolean, Double, Integer, JSONArray, JSONObject, Long, + String, or the JSONObject.NULL object. +
Returns:
this. +
Throws: +
JSONException - If the value is a non-finite number.
+
+
+
+ +

+quote

+
+public static java.lang.String quote(java.lang.String string)
+
+
Produce a string in double quotes with backslash sequences in all the + right places. A backslash will be inserted within +
+
Parameters:
string - A String +
Returns:
A String correctly formatted for insertion in a JSON text.
+
+
+
+ +

+remove

+
+public java.lang.Object remove(java.lang.String key)
+
+
Remove a name and its value, if present. +

+

+
Parameters:
key - The name to be removed. +
Returns:
The value that was associated with the name, or null if there was + no value.
+
+
+
+ +

+stringToValue

+
+public static java.lang.Object stringToValue(java.lang.String string)
+
+
Try to convert a string into a number, boolean, or null. If the string + can't be converted, return the string. +

+

+
Parameters:
string - A String. +
Returns:
A simple JSON value.
+
+
+
+ +

+testValidity

+
+public static void testValidity(java.lang.Object o)
+                         throws JSONException
+
+
Throw an exception if the object is a NaN or infinite number. +

+

+
Parameters:
o - The object to test. +
Throws: +
JSONException - If o is a non-finite number.
+
+
+
+ +

+toJSONArray

+
+public JSONArray toJSONArray(JSONArray names)
+                      throws JSONException
+
+
Produce a JSONArray containing the values of the members of this + JSONObject. +

+

+
Parameters:
names - A JSONArray containing a list of key strings. This determines + the sequence of the values in the result. +
Returns:
A JSONArray of values. +
Throws: +
JSONException - If any of the values are non-finite numbers.
+
+
+
+ +

+toString

+
+public java.lang.String toString()
+
+
Make a JSON text of this JSONObject. For compactness, no whitespace is + added. If this would not result in a syntactically correct JSON text, + then null will be returned instead. +

+ Warning: This method assumes that the data structure is acyclical. +

+

+
Overrides:
toString in class java.lang.Object
+
+
+ +
Returns:
a printable, displayable, portable, transmittable representation + of the object, beginning with { (left + brace) and ending with } (right + brace).
+
+
+
+ +

+toString

+
+public java.lang.String toString(int indentFactor)
+
+
Make a prettyprinted JSON text of this JSONObject. +

+ Warning: This method assumes that the data structure is acyclical. +

+

+
Parameters:
indentFactor - The number of spaces to add to each level of indentation. +
Returns:
a printable, displayable, portable, transmittable representation + of the object, beginning with { (left + brace) and ending with } (right + brace). +
Throws: +
JSONException - If the object contains an invalid number.
+
+
+
+ +

+valueToString

+
+public static java.lang.String valueToString(java.lang.Object value)
+
+
Make a JSON text of an Object value. If the object has an + value.toJSONString() method, then that method will be used to produce the + JSON text. The method is required to produce a strictly conforming text. + If the object does not contain a toJSONString method (which is the most + common case), then a text will be produced by other means. If the value + is an array or Collection, then a JSONArray will be made from it and its + toJSONString method will be called. If the value is a MAP, then a + JSONObject will be made from it and its toJSONString method will be + called. Otherwise, the value's toString method will be called, and the + result will be quoted. + +

+ Warning: This method assumes that the data structure is acyclical. +

+

+
Parameters:
value - The value to be serialized. +
Returns:
a printable, displayable, transmittable representation of the + object, beginning with { (left + brace) and ending with } (right + brace). +
Throws: +
JSONException - If the value is or contains an invalid number.
+
+
+
+ +

+wrap

+
+public static java.lang.Object wrap(java.lang.Object object)
+
+
Wrap an object, if necessary. If the object is null, return the NULL + object. If it is an array or collection, wrap it in a JSONArray. If it is + a map, wrap it in a JSONObject. If it is a standard property (Double, + String, et al) then it is already wrapped. Otherwise, if it comes from + one of the java packages, turn it into a string. And if it doesn't, try + to wrap it in a JSONObject. If the wrapping fails, then null is returned. +

+

+
Parameters:
object - The object to wrap +
Returns:
The wrapped value
+
+
+
+ +

+write

+
+public java.io.Writer write(java.io.Writer writer)
+
+
Write the contents of the JSONObject as JSON text to a writer. For + compactness, no whitespace is added. +

+ Warning: This method assumes that the data structure is acyclical. +

+

+ +
Returns:
The writer. +
Throws: +
JSONException
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+processing library json4processing by Andreas Goransson. (c) 2011 + + diff --git a/distribution/json4processing-0.1.3/reference/org/json/JSONString.html b/distribution/json4processing-0.1.3/reference/org/json/JSONString.html new file mode 100644 index 000000000..cf77e5337 --- /dev/null +++ b/distribution/json4processing-0.1.3/reference/org/json/JSONString.html @@ -0,0 +1,216 @@ + + + + + + +JSONString (Javadocs: json4processing) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.json +
+Interface JSONString

+
+
+
public interface JSONString
+ + +

+The JSONString interface allows a toJSONString() + method so that a class can change the behavior of + JSONObject.toString(), JSONArray.toString(), + and JSONWriter.value(Object). The + toJSONString method will be used instead of the default behavior + of using the Object's toString() method and quoting the result. +

+ +

+


+ +

+ + + + + + + + + + + + +
+Method Summary
+ java.lang.StringtoJSONString() + +
+          The toJSONString method allows a class to produce its own JSON + serialization.
+  +

+ + + + + + + + +
+Method Detail
+ +

+toJSONString

+
+java.lang.String toJSONString()
+
+
The toJSONString method allows a class to produce its own JSON + serialization. +

+

+ +
Returns:
A strictly syntactically correct JSON text.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+processing library json4processing by Andreas Goransson. (c) 2011 + + diff --git a/distribution/json4processing-0.1.3/reference/org/json/JSONStringer.html b/distribution/json4processing-0.1.3/reference/org/json/JSONStringer.html new file mode 100644 index 000000000..190f02903 --- /dev/null +++ b/distribution/json4processing-0.1.3/reference/org/json/JSONStringer.html @@ -0,0 +1,303 @@ + + + + + + +JSONStringer (Javadocs: json4processing) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.json +
+Class JSONStringer

+
+java.lang.Object
+  extended by org.json.JSONWriter
+      extended by org.json.JSONStringer
+
+
+
+
public class JSONStringer
extends JSONWriter
+ + +

+JSONStringer provides a quick and convenient way of producing JSON text. + The texts produced strictly conform to JSON syntax rules. No whitespace is + added, so the results are ready for transmission or storage. Each instance of + JSONStringer can produce one JSON text. +

+ A JSONStringer instance provides a value method for appending + values to the + text, and a key + method for adding keys before values in objects. There are array + and endArray methods that make and bound array values, and + object and endObject methods which make and bound + object values. All of these methods return the JSONWriter instance, + permitting cascade style. For example,

+ myString = new JSONStringer()
+     .object()
+         .key("JSON")
+         .value("Hello, World!")
+     .endObject()
+     .toString();
which produces the string
+ {"JSON":"Hello, World!"}
+

+ The first method called must be array or object. + There are no methods for adding commas or colons. JSONStringer adds them for + you. Objects and arrays can be nested up to 20 levels deep. +

+ This can sometimes be easier than using a JSONObject to build a string. +

+ +

+

+
Author:
+
JSON.org
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
JSONStringer() + +
+          Make a fresh JSONStringer.
+  + + + + + + + + + + + +
+Method Summary
+ java.lang.StringtoString() + +
+          Return the JSON text.
+ + + + + + + +
Methods inherited from class org.json.JSONWriter
array, endArray, endObject, key, object, value, value, value, value
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+JSONStringer

+
+public JSONStringer()
+
+
Make a fresh JSONStringer. It can be used to build one JSON text. +

+

+ + + + + + + + +
+Method Detail
+ +

+toString

+
+public java.lang.String toString()
+
+
Return the JSON text. This method is used to obtain the product of the + JSONStringer instance. It will return null if there was a + problem in the construction of the JSON text (such as the calls to + array were not properly balanced with calls to + endArray). +

+

+
Overrides:
toString in class java.lang.Object
+
+
+ +
Returns:
The JSON text.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+processing library json4processing by Andreas Goransson. (c) 2011 + + diff --git a/distribution/json4processing-0.1.3/reference/org/json/JSONTokener.html b/distribution/json4processing-0.1.3/reference/org/json/JSONTokener.html new file mode 100644 index 000000000..d83b0c012 --- /dev/null +++ b/distribution/json4processing-0.1.3/reference/org/json/JSONTokener.html @@ -0,0 +1,667 @@ + + + + + + +JSONTokener (Javadocs: json4processing) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.json +
+Class JSONTokener

+
+java.lang.Object
+  extended by org.json.JSONTokener
+
+
+
Direct Known Subclasses:
HTTPTokener, XMLTokener
+
+
+
+
public class JSONTokener
extends java.lang.Object
+ + +

+A JSONTokener takes a source string and extracts characters and tokens from + it. It is used by the JSONObject and JSONArray constructors to parse + JSON source strings. +

+ +

+

+
Author:
+
JSON.org
+
+
+ +

+ + + + + + + + + + + + + + + + + +
+Constructor Summary
JSONTokener(java.io.InputStream inputStream) + +
+          Construct a JSONTokener from an InputStream.
JSONTokener(java.io.Reader reader) + +
+          Construct a JSONTokener from a Reader.
JSONTokener(java.lang.String s) + +
+          Construct a JSONTokener from a string.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidback() + +
+          Back up one character.
+static intdehexchar(char c) + +
+          Get the hex value of a character (base16).
+ booleanend() + +
+           
+ booleanmore() + +
+          Determine if the source string still contains characters that next() + can consume.
+ charnext() + +
+          Get the next character in the source string.
+ charnext(char c) + +
+          Consume the next character, and check that it matches a specified + character.
+ java.lang.Stringnext(int n) + +
+          Get the next n characters.
+ charnextClean() + +
+          Get the next char in the string, skipping whitespace.
+ java.lang.StringnextString(char quote) + +
+          Return the characters up to the next close quote character.
+ java.lang.StringnextTo(char delimiter) + +
+          Get the text up but not including the specified character or the + end of line, whichever comes first.
+ java.lang.StringnextTo(java.lang.String delimiters) + +
+          Get the text up but not including one of the specified delimiter + characters or the end of line, whichever comes first.
+ java.lang.ObjectnextValue() + +
+          Get the next value.
+ charskipTo(char to) + +
+          Skip characters until the next character is the requested character.
+ JSONExceptionsyntaxError(java.lang.String message) + +
+          Make a JSONException to signal a syntax error.
+ java.lang.StringtoString() + +
+          Make a printable string of this JSONTokener.
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+JSONTokener

+
+public JSONTokener(java.io.Reader reader)
+
+
Construct a JSONTokener from a Reader. +

+

+
Parameters:
reader - A reader.
+
+
+ +

+JSONTokener

+
+public JSONTokener(java.io.InputStream inputStream)
+            throws JSONException
+
+
Construct a JSONTokener from an InputStream. +

+

+ +
Throws: +
JSONException
+
+
+ +

+JSONTokener

+
+public JSONTokener(java.lang.String s)
+
+
Construct a JSONTokener from a string. +

+

+
Parameters:
s - A source string.
+
+ + + + + + + + +
+Method Detail
+ +

+back

+
+public void back()
+          throws JSONException
+
+
Back up one character. This provides a sort of lookahead capability, + so that you can test for a digit or letter before attempting to parse + the next number or identifier. +

+

+ +
Throws: +
JSONException
+
+
+
+ +

+dehexchar

+
+public static int dehexchar(char c)
+
+
Get the hex value of a character (base16). +

+

+
Parameters:
c - A character between '0' and '9' or between 'A' and 'F' or + between 'a' and 'f'. +
Returns:
An int between 0 and 15, or -1 if c was not a hex digit.
+
+
+
+ +

+end

+
+public boolean end()
+
+
+
+
+
+
+ +

+more

+
+public boolean more()
+             throws JSONException
+
+
Determine if the source string still contains characters that next() + can consume. +

+

+ +
Returns:
true if not yet at the end of the source. +
Throws: +
JSONException
+
+
+
+ +

+next

+
+public char next()
+          throws JSONException
+
+
Get the next character in the source string. +

+

+ +
Returns:
The next character, or 0 if past the end of the source string. +
Throws: +
JSONException
+
+
+
+ +

+next

+
+public char next(char c)
+          throws JSONException
+
+
Consume the next character, and check that it matches a specified + character. +

+

+
Parameters:
c - The character to match. +
Returns:
The character. +
Throws: +
JSONException - if the character does not match.
+
+
+
+ +

+next

+
+public java.lang.String next(int n)
+                      throws JSONException
+
+
Get the next n characters. +

+

+
Parameters:
n - The number of characters to take. +
Returns:
A string of n characters. +
Throws: +
JSONException - Substring bounds error if there are not + n characters remaining in the source string.
+
+
+
+ +

+nextClean

+
+public char nextClean()
+               throws JSONException
+
+
Get the next char in the string, skipping whitespace. +

+

+ +
Returns:
A character, or 0 if there are no more characters. +
Throws: +
JSONException
+
+
+
+ +

+nextString

+
+public java.lang.String nextString(char quote)
+                            throws JSONException
+
+
Return the characters up to the next close quote character. + Backslash processing is done. The formal JSON format does not + allow strings in single quotes, but an implementation is allowed to + accept them. +

+

+
Parameters:
quote - The quoting character, either + " (double quote) or + ' (single quote). +
Returns:
A String. +
Throws: +
JSONException - Unterminated string.
+
+
+
+ +

+nextTo

+
+public java.lang.String nextTo(char delimiter)
+                        throws JSONException
+
+
Get the text up but not including the specified character or the + end of line, whichever comes first. +

+

+
Parameters:
delimiter - A delimiter character. +
Returns:
A string. +
Throws: +
JSONException
+
+
+
+ +

+nextTo

+
+public java.lang.String nextTo(java.lang.String delimiters)
+                        throws JSONException
+
+
Get the text up but not including one of the specified delimiter + characters or the end of line, whichever comes first. +

+

+
Parameters:
delimiters - A set of delimiter characters. +
Returns:
A string, trimmed. +
Throws: +
JSONException
+
+
+
+ +

+nextValue

+
+public java.lang.Object nextValue()
+                           throws JSONException
+
+
Get the next value. The value can be a Boolean, Double, Integer, + JSONArray, JSONObject, Long, or String, or the JSONObject.NULL object. +

+

+ +
Returns:
An object. +
Throws: +
JSONException - If syntax error.
+
+
+
+ +

+skipTo

+
+public char skipTo(char to)
+            throws JSONException
+
+
Skip characters until the next character is the requested character. + If the requested character is not found, no characters are skipped. +

+

+
Parameters:
to - A character to skip to. +
Returns:
The requested character, or zero if the requested character + is not found. +
Throws: +
JSONException
+
+
+
+ +

+syntaxError

+
+public JSONException syntaxError(java.lang.String message)
+
+
Make a JSONException to signal a syntax error. +

+

+
Parameters:
message - The error message. +
Returns:
A JSONException object, suitable for throwing
+
+
+
+ +

+toString

+
+public java.lang.String toString()
+
+
Make a printable string of this JSONTokener. +

+

+
Overrides:
toString in class java.lang.Object
+
+
+ +
Returns:
" at {index} [character {character} line {line}]"
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+processing library json4processing by Andreas Goransson. (c) 2011 + + diff --git a/distribution/json4processing-0.1.3/reference/org/json/JSONWriter.html b/distribution/json4processing-0.1.3/reference/org/json/JSONWriter.html new file mode 100644 index 000000000..3dc6e277a --- /dev/null +++ b/distribution/json4processing-0.1.3/reference/org/json/JSONWriter.html @@ -0,0 +1,506 @@ + + + + + + +JSONWriter (Javadocs: json4processing) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.json +
+Class JSONWriter

+
+java.lang.Object
+  extended by org.json.JSONWriter
+
+
+
Direct Known Subclasses:
JSONStringer
+
+
+
+
public class JSONWriter
extends java.lang.Object
+ + +

+JSONWriter provides a quick and convenient way of producing JSON text. + The texts produced strictly conform to JSON syntax rules. No whitespace is + added, so the results are ready for transmission or storage. Each instance of + JSONWriter can produce one JSON text. +

+ A JSONWriter instance provides a value method for appending + values to the + text, and a key + method for adding keys before values in objects. There are array + and endArray methods that make and bound array values, and + object and endObject methods which make and bound + object values. All of these methods return the JSONWriter instance, + permitting a cascade style. For example,

+ new JSONWriter(myWriter)
+     .object()
+         .key("JSON")
+         .value("Hello, World!")
+     .endObject();
which writes
+ {"JSON":"Hello, World!"}
+

+ The first method called must be array or object. + There are no methods for adding commas or colons. JSONWriter adds them for + you. Objects and arrays can be nested up to 20 levels deep. +

+ This can sometimes be easier than using a JSONObject to build a string. +

+ +

+

+
Author:
+
JSON.org
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
JSONWriter(java.io.Writer w) + +
+          Make a fresh JSONWriter.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ JSONWriterarray() + +
+          Begin appending a new array.
+ JSONWriterendArray() + +
+          End an array.
+ JSONWriterendObject() + +
+          End an object.
+ JSONWriterkey(java.lang.String string) + +
+          Append a key.
+ JSONWriterobject() + +
+          Begin appending a new object.
+ JSONWritervalue(boolean b) + +
+          Append either the value true or the value + false.
+ JSONWritervalue(double d) + +
+          Append a double value.
+ JSONWritervalue(long l) + +
+          Append a long value.
+ JSONWritervalue(java.lang.Object object) + +
+          Append an object value.
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+JSONWriter

+
+public JSONWriter(java.io.Writer w)
+
+
Make a fresh JSONWriter. It can be used to build one JSON text. +

+

+ + + + + + + + +
+Method Detail
+ +

+array

+
+public JSONWriter array()
+                 throws JSONException
+
+
Begin appending a new array. All values until the balancing + endArray will be appended to this array. The + endArray method must be called to mark the array's end. +

+

+ +
Returns:
this +
Throws: +
JSONException - If the nesting is too deep, or if the object is + started in the wrong place (for example as a key or after the end of the + outermost array or object).
+
+
+
+ +

+endArray

+
+public JSONWriter endArray()
+                    throws JSONException
+
+
End an array. This method most be called to balance calls to + array. +

+

+ +
Returns:
this +
Throws: +
JSONException - If incorrectly nested.
+
+
+
+ +

+endObject

+
+public JSONWriter endObject()
+                     throws JSONException
+
+
End an object. This method most be called to balance calls to + object. +

+

+ +
Returns:
this +
Throws: +
JSONException - If incorrectly nested.
+
+
+
+ +

+key

+
+public JSONWriter key(java.lang.String string)
+               throws JSONException
+
+
Append a key. The key will be associated with the next value. In an + object, every value must be preceded by a key. +

+

+
Parameters:
string - A key string. +
Returns:
this +
Throws: +
JSONException - If the key is out of place. For example, keys + do not belong in arrays or if the key is null.
+
+
+
+ +

+object

+
+public JSONWriter object()
+                  throws JSONException
+
+
Begin appending a new object. All keys and values until the balancing + endObject will be appended to this object. The + endObject method must be called to mark the object's end. +

+

+ +
Returns:
this +
Throws: +
JSONException - If the nesting is too deep, or if the object is + started in the wrong place (for example as a key or after the end of the + outermost array or object).
+
+
+
+ +

+value

+
+public JSONWriter value(boolean b)
+                 throws JSONException
+
+
Append either the value true or the value + false. +

+

+
Parameters:
b - A boolean. +
Returns:
this +
Throws: +
JSONException
+
+
+
+ +

+value

+
+public JSONWriter value(double d)
+                 throws JSONException
+
+
Append a double value. +

+

+
Parameters:
d - A double. +
Returns:
this +
Throws: +
JSONException - If the number is not finite.
+
+
+
+ +

+value

+
+public JSONWriter value(long l)
+                 throws JSONException
+
+
Append a long value. +

+

+
Parameters:
l - A long. +
Returns:
this +
Throws: +
JSONException
+
+
+
+ +

+value

+
+public JSONWriter value(java.lang.Object object)
+                 throws JSONException
+
+
Append an object value. +

+

+
Parameters:
object - The object to append. It can be null, or a Boolean, Number, + String, JSONObject, or JSONArray, or an object that implements JSONString. +
Returns:
this +
Throws: +
JSONException - If the value is out of sequence.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+processing library json4processing by Andreas Goransson. (c) 2011 + + diff --git a/distribution/json4processing-0.1.3/reference/org/json/XML.html b/distribution/json4processing-0.1.3/reference/org/json/XML.html new file mode 100644 index 000000000..371f29124 --- /dev/null +++ b/distribution/json4processing-0.1.3/reference/org/json/XML.html @@ -0,0 +1,607 @@ + + + + + + +XML (Javadocs: json4processing) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.json +
+Class XML

+
+java.lang.Object
+  extended by org.json.XML
+
+
+
+
public class XML
extends java.lang.Object
+ + +

+This provides static methods to convert an XML text into a JSONObject, + and to covert a JSONObject into an XML text. +

+ +

+

+
Author:
+
JSON.org
+
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+static java.lang.CharacterAMP + +
+          The Character '&'.
+static java.lang.CharacterAPOS + +
+          The Character '''.
+static java.lang.CharacterBANG + +
+          The Character '!'.
+static java.lang.CharacterEQ + +
+          The Character '='.
+static java.lang.CharacterGT + +
+          The Character '>'.
+static java.lang.CharacterLT + +
+          The Character '<'.
+static java.lang.CharacterQUEST + +
+          The Character '?'.
+static java.lang.CharacterQUOT + +
+          The Character '"'.
+static java.lang.CharacterSLASH + +
+          The Character '/'.
+  + + + + + + + + + + +
+Constructor Summary
XML() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+static java.lang.Stringescape(java.lang.String string) + +
+          Replace special characters with XML escapes: + + & (ampersand) is replaced by &amp; + < (less than) is replaced by &lt; + > (greater than) is replaced by &gt; + " (double quote) is replaced by &quot; +
+static voidnoSpace(java.lang.String string) + +
+          Throw an exception if the string contains whitespace.
+static java.lang.ObjectstringToValue(java.lang.String string) + +
+          Try to convert a string into a number, boolean, or null.
+static JSONObjecttoJSONObject(java.lang.String string) + +
+          Convert a well-formed (but not necessarily valid) XML string into a + JSONObject.
+static java.lang.StringtoString(java.lang.Object object) + +
+          Convert a JSONObject into a well-formed, element-normal XML string.
+static java.lang.StringtoString(java.lang.Object object, + java.lang.String tagName) + +
+          Convert a JSONObject into a well-formed, element-normal XML string.
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+AMP

+
+public static final java.lang.Character AMP
+
+
The Character '&'. +

+

+
+
+
+ +

+APOS

+
+public static final java.lang.Character APOS
+
+
The Character '''. +

+

+
+
+
+ +

+BANG

+
+public static final java.lang.Character BANG
+
+
The Character '!'. +

+

+
+
+
+ +

+EQ

+
+public static final java.lang.Character EQ
+
+
The Character '='. +

+

+
+
+
+ +

+GT

+
+public static final java.lang.Character GT
+
+
The Character '>'. +

+

+
+
+
+ +

+LT

+
+public static final java.lang.Character LT
+
+
The Character '<'. +

+

+
+
+
+ +

+QUEST

+
+public static final java.lang.Character QUEST
+
+
The Character '?'. +

+

+
+
+
+ +

+QUOT

+
+public static final java.lang.Character QUOT
+
+
The Character '"'. +

+

+
+
+
+ +

+SLASH

+
+public static final java.lang.Character SLASH
+
+
The Character '/'. +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+XML

+
+public XML()
+
+
+ + + + + + + + +
+Method Detail
+ +

+escape

+
+public static java.lang.String escape(java.lang.String string)
+
+
Replace special characters with XML escapes: +
+ & (ampersand) is replaced by &amp;
+ < (less than) is replaced by &lt;
+ > (greater than) is replaced by &gt;
+ " (double quote) is replaced by &quot;
+ 
+

+

+
Parameters:
string - The string to be escaped. +
Returns:
The escaped string.
+
+
+
+ +

+noSpace

+
+public static void noSpace(java.lang.String string)
+                    throws JSONException
+
+
Throw an exception if the string contains whitespace. + Whitespace is not allowed in tagNames and attributes. +

+

+
Parameters:
string - +
Throws: +
JSONException
+
+
+
+ +

+stringToValue

+
+public static java.lang.Object stringToValue(java.lang.String string)
+
+
Try to convert a string into a number, boolean, or null. If the string + can't be converted, return the string. This is much less ambitious than + JSONObject.stringToValue, especially because it does not attempt to + convert plus forms, octal forms, hex forms, or E forms lacking decimal + points. +

+

+
Parameters:
string - A String. +
Returns:
A simple JSON value.
+
+
+
+ +

+toJSONObject

+
+public static JSONObject toJSONObject(java.lang.String string)
+                               throws JSONException
+
+
Convert a well-formed (but not necessarily valid) XML string into a + JSONObject. Some information may be lost in this transformation + because JSON is a data format and XML is a document format. XML uses + elements, attributes, and content text, while JSON uses unordered + collections of name/value pairs and arrays of values. JSON does not + does not like to distinguish between elements and attributes. + Sequences of similar elements are represented as JSONArrays. Content + text may be placed in a "content" member. Comments, prologs, DTDs, and + <[ [ ]]> are ignored. +

+

+
Parameters:
string - The source string. +
Returns:
A JSONObject containing the structured data from the XML string. +
Throws: +
JSONException
+
+
+
+ +

+toString

+
+public static java.lang.String toString(java.lang.Object object)
+                                 throws JSONException
+
+
Convert a JSONObject into a well-formed, element-normal XML string. +

+

+
Parameters:
object - A JSONObject. +
Returns:
A string. +
Throws: +
JSONException
+
+
+
+ +

+toString

+
+public static java.lang.String toString(java.lang.Object object,
+                                        java.lang.String tagName)
+                                 throws JSONException
+
+
Convert a JSONObject into a well-formed, element-normal XML string. +

+

+
Parameters:
object - A JSONObject.
tagName - The optional name of the enclosing tag. +
Returns:
A string. +
Throws: +
JSONException
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+processing library json4processing by Andreas Goransson. (c) 2011 + + diff --git a/distribution/json4processing-0.1.3/reference/org/json/XMLTokener.html b/distribution/json4processing-0.1.3/reference/org/json/XMLTokener.html new file mode 100644 index 000000000..a5b23d576 --- /dev/null +++ b/distribution/json4processing-0.1.3/reference/org/json/XMLTokener.html @@ -0,0 +1,452 @@ + + + + + + +XMLTokener (Javadocs: json4processing) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.json +
+Class XMLTokener

+
+java.lang.Object
+  extended by org.json.JSONTokener
+      extended by org.json.XMLTokener
+
+
+
+
public class XMLTokener
extends JSONTokener
+ + +

+The XMLTokener extends the JSONTokener to provide additional methods + for the parsing of XML texts. +

+ +

+

+
Author:
+
JSON.org
+
+
+ +

+ + + + + + + + + + + +
+Field Summary
+static java.util.HashMapentity + +
+          The table of entity values.
+  + + + + + + + + + + +
+Constructor Summary
XMLTokener(java.lang.String s) + +
+          Construct an XMLTokener from a string.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ java.lang.StringnextCDATA() + +
+          Get the text in the CDATA block.
+ java.lang.ObjectnextContent() + +
+          Get the next XML outer token, trimming whitespace.
+ java.lang.ObjectnextEntity(char ampersand) + +
+          Return the next entity.
+ java.lang.ObjectnextMeta() + +
+          Returns the next XML meta token.
+ java.lang.ObjectnextToken() + +
+          Get the next XML Token.
+ booleanskipPast(java.lang.String to) + +
+          Skip characters until past the requested string.
+ + + + + + + +
Methods inherited from class org.json.JSONTokener
back, dehexchar, end, more, next, next, next, nextClean, nextString, nextTo, nextTo, nextValue, skipTo, syntaxError, toString
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+entity

+
+public static final java.util.HashMap entity
+
+
The table of entity values. It initially contains Character values for + amp, apos, gt, lt, quot. +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+XMLTokener

+
+public XMLTokener(java.lang.String s)
+
+
Construct an XMLTokener from a string. +

+

+
Parameters:
s - A source string.
+
+ + + + + + + + +
+Method Detail
+ +

+nextCDATA

+
+public java.lang.String nextCDATA()
+                           throws JSONException
+
+
Get the text in the CDATA block. +

+

+ +
Returns:
The string up to the ]]>. +
Throws: +
JSONException - If the ]]> is not found.
+
+
+
+ +

+nextContent

+
+public java.lang.Object nextContent()
+                             throws JSONException
+
+
Get the next XML outer token, trimming whitespace. There are two kinds + of tokens: the '<' character which begins a markup tag, and the content + text between markup tags. +

+

+ +
Returns:
A string, or a '<' Character, or null if there is no more + source text. +
Throws: +
JSONException
+
+
+
+ +

+nextEntity

+
+public java.lang.Object nextEntity(char ampersand)
+                            throws JSONException
+
+
Return the next entity. These entities are translated to Characters: + & ' > < ". +

+

+
Parameters:
ampersand - An ampersand character. +
Returns:
A Character or an entity String if the entity is not recognized. +
Throws: +
JSONException - If missing ';' in XML entity.
+
+
+
+ +

+nextMeta

+
+public java.lang.Object nextMeta()
+                          throws JSONException
+
+
Returns the next XML meta token. This is used for skipping over + and structures. +

+

+ +
Returns:
Syntax characters (< > / = ! ?) are returned as + Character, and strings and names are returned as Boolean. We don't care + what the values actually are. +
Throws: +
JSONException - If a string is not properly closed or if the XML + is badly structured.
+
+
+
+ +

+nextToken

+
+public java.lang.Object nextToken()
+                           throws JSONException
+
+
Get the next XML Token. These tokens are found inside of angle + brackets. It may be one of these characters: / > = ! ? or it + may be a string wrapped in single quotes or double quotes, or it may be a + name. +

+

+ +
Returns:
a String or a Character. +
Throws: +
JSONException - If the XML is not well formed.
+
+
+
+ +

+skipPast

+
+public boolean skipPast(java.lang.String to)
+                 throws JSONException
+
+
Skip characters until past the requested string. + If it is not found, we are left at the end of the source with a result of false. +

+

+
Parameters:
to - A string to skip past. +
Throws: +
JSONException
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+processing library json4processing by Andreas Goransson. (c) 2011 + + diff --git a/distribution/json4processing-0.1.3/reference/org/json/package-frame.html b/distribution/json4processing-0.1.3/reference/org/json/package-frame.html new file mode 100644 index 000000000..c70171cf6 --- /dev/null +++ b/distribution/json4processing-0.1.3/reference/org/json/package-frame.html @@ -0,0 +1,78 @@ + + + + + + +org.json (Javadocs: json4processing) + + + + + + + + + + + +org.json + + + + +
+Interfaces  + +
+JSONString
+ + + + + + +
+Classes  + +
+CDL +
+Cookie +
+CookieList +
+HTTP +
+HTTPTokener +
+JSONArray +
+JSONML +
+JSONObject +
+JSONStringer +
+JSONTokener +
+JSONWriter +
+XML +
+XMLTokener
+ + + + + + +
+Exceptions  + +
+JSONException
+ + + + diff --git a/distribution/json4processing-0.1.3/reference/org/json/package-summary.html b/distribution/json4processing-0.1.3/reference/org/json/package-summary.html new file mode 100644 index 000000000..8e335ad15 --- /dev/null +++ b/distribution/json4processing-0.1.3/reference/org/json/package-summary.html @@ -0,0 +1,239 @@ + + + + + + +org.json (Javadocs: json4processing) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+

+Package org.json +

+ + + + + + + + + +
+Interface Summary
JSONStringThe JSONString interface allows a toJSONString() + method so that a class can change the behavior of + JSONObject.toString(), JSONArray.toString(), + and JSONWriter.value(Object).
+  + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Class Summary
CDLThis provides static methods to convert comma delimited text into a + JSONArray, and to covert a JSONArray into comma delimited text.
CookieConvert a web browser cookie specification to a JSONObject and back.
CookieListConvert a web browser cookie list string to a JSONObject and back.
HTTPConvert an HTTP header to a JSONObject and back.
HTTPTokenerThe HTTPTokener extends the JSONTokener to provide additional methods + for the parsing of HTTP headers.
JSONArrayA JSONArray is an ordered sequence of values.
JSONMLThis provides static methods to convert an XML text into a JSONArray or + JSONObject, and to covert a JSONArray or JSONObject into an XML text using + the JsonML transform.
JSONObjectA JSONObject is an unordered collection of name/value pairs.
JSONStringerJSONStringer provides a quick and convenient way of producing JSON text.
JSONTokenerA JSONTokener takes a source string and extracts characters and tokens from + it.
JSONWriterJSONWriter provides a quick and convenient way of producing JSON text.
XMLThis provides static methods to convert an XML text into a JSONObject, + and to covert a JSONObject into an XML text.
XMLTokenerThe XMLTokener extends the JSONTokener to provide additional methods + for the parsing of XML texts.
+  + +

+ + + + + + + + + +
+Exception Summary
JSONExceptionThe JSONException is thrown by the JSON.org classes when things are amiss.
+  + +

+

+
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+processing library json4processing by Andreas Goransson. (c) 2011 + + diff --git a/distribution/json4processing-0.1.3/reference/org/json/package-tree.html b/distribution/json4processing-0.1.3/reference/org/json/package-tree.html new file mode 100644 index 000000000..6109a5105 --- /dev/null +++ b/distribution/json4processing-0.1.3/reference/org/json/package-tree.html @@ -0,0 +1,160 @@ + + + + + + +org.json Class Hierarchy (Javadocs: json4processing) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For Package org.json +

+
+

+Class Hierarchy +

+ +

+Interface Hierarchy +

+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+processing library json4processing by Andreas Goransson. (c) 2011 + + diff --git a/distribution/json4processing-0.1.3/reference/overview-tree.html b/distribution/json4processing-0.1.3/reference/overview-tree.html new file mode 100644 index 000000000..a665f3683 --- /dev/null +++ b/distribution/json4processing-0.1.3/reference/overview-tree.html @@ -0,0 +1,162 @@ + + + + + + +Class Hierarchy (Javadocs: json4processing) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For All Packages

+
+
+
Package Hierarchies:
org.json
+
+

+Class Hierarchy +

+ +

+Interface Hierarchy +

+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+processing library json4processing by Andreas Goransson. (c) 2011 + + diff --git a/distribution/json4processing-0.1.3/reference/package-list b/distribution/json4processing-0.1.3/reference/package-list new file mode 100644 index 000000000..6374a8ef9 --- /dev/null +++ b/distribution/json4processing-0.1.3/reference/package-list @@ -0,0 +1 @@ +org.json diff --git a/distribution/json4processing-0.1.3/reference/resources/inherit.gif b/distribution/json4processing-0.1.3/reference/resources/inherit.gif new file mode 100644 index 0000000000000000000000000000000000000000..c814867a13deb0ca7ea2156c6ca1d5a03372af7e GIT binary patch literal 57 zcmZ?wbhEHbIIT!9-C*e{wE9>Kx3D)-;0v)C; KYxQGgum%9JOA&7X literal 0 HcmV?d00001 diff --git a/distribution/json4processing-0.1.3/reference/serialized-form.html b/distribution/json4processing-0.1.3/reference/serialized-form.html new file mode 100644 index 000000000..37221761e --- /dev/null +++ b/distribution/json4processing-0.1.3/reference/serialized-form.html @@ -0,0 +1,178 @@ + + + + + + +Serialized Form (Javadocs: json4processing) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Serialized Form

+
+
+ + + + + +
+Package org.json
+ +

+ + + + + +
+Class org.json.JSONException extends java.lang.Exception implements Serializable
+ +

+serialVersionUID: 0L + +

+ + + + + +
+Serialized Fields
+ +

+cause

+
+java.lang.Throwable cause
+
+
+
+
+ +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+processing library json4processing by Andreas Goransson. (c) 2011 + + diff --git a/distribution/json4processing-0.1.3/reference/stylesheet.css b/distribution/json4processing-0.1.3/reference/stylesheet.css new file mode 100644 index 000000000..54998c2bc --- /dev/null +++ b/distribution/json4processing-0.1.3/reference/stylesheet.css @@ -0,0 +1,310 @@ +/* Javadoc style sheet */ +/* Define colors, fonts and other style attributes here to override the defaults */ +/* processingLibs style by andreas schlegel, sojamo */ + + +body { + margin : 0; + padding : 0; + padding-left : 10px; + padding-right : 8px; + background-color : #FFFFFF; + font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; + font-size : 100%; + font-size : 0.7em; + font-weight : normal; + line-height : normal; + margin-bottom:30px; +} + + + + +/* Headings */ +h1, h2, h3, h4, h5, th { + font-family :Arial, Helvetica, sans-serif; + font-size:1.2em; +} + + +p { + font-size : 1em; + width:80%; +} + +pre, code { + font-family : "Courier New", Courier, monospace; + font-size : 12px; + line-height : normal; +} + + + +table { + border:0; + margin-bottom:10px; + margin-top:10px; +} + + +tr, td { + border-top: 0px solid; + border-left: 0px solid; + padding-top:8px; + padding-bottom:8px; +} + + + +hr { + border:0; + height:1px; + padding:0; + margin:0; + margin-bottom:4px; + +} + + + +dd, th, td, font { + font-size:1.0em; + line-height:1.0em; +} + + + +dt { + margin-bottom:0px; +} + + + +dd { + margin-top:2px; + margin-bottom:4px; +} + + + +a { + text-decoration: underline; + font-weight: normal; +} + +a:hover, +a:active { + text-decoration: underline; + font-weight: normal; +} + +a:visited, +a:link:visited { + text-decoration: underline; + font-weight: normal; +} + + +img { + border: 0px solid #000000; +} + + + +/* Navigation bar fonts */ +.NavBarCell1 { + border:0; +} + +.NavBarCell1Rev { + border:0; +} + +.NavBarFont1 { + font-family: Arial, Helvetica, sans-serif; + font-size:1.1em; +} + + +.NavBarFont1 b { + font-weight:normal; +} + + + +.NavBarFont1:after, .NavBarFont1Rev:after { + font-weight:normal; + content: " \\"; +} + + +.NavBarFont1Rev { + font-family: Arial, Helvetica, sans-serif; + font-size:1.1em; +} + +.NavBarFont1Rev b { + font-family: Arial, Helvetica, sans-serif; + font-size:1.1em; + font-weight:normal; +} + +.NavBarCell2 { + font-family: Arial, Helvetica, sans-serif; +} + +.NavBarCell3 { + font-family: Arial, Helvetica, sans-serif; +} + + + +font.FrameItemFont { + font-family: Helvetica, Arial, sans-serif; + font-size:1.1em; + line-height:1.1em; +} + +font.FrameHeadingFont { + font-family: Helvetica, Arial, sans-serif; + line-height:32px; +} + +/* Font used in left-hand frame lists */ +.FrameTitleFont { + font-family: Helvetica, Arial, sans-serif +} + + +.toggleList { + padding:0; + margin:0; + margin-top:12px; +} + +.toggleList dt { + font-weight:bold; + font-size:12px; + font-family:arial,sans-serif; + padding:0px; + margin:10px 0px 10px 0px; +} + +.toggleList dt span { + font-family: monospace; + padding:0; + margin:0; +} + + +.toggleList dd { + margin:0; + padding:0; +} + +html.isjs .toggleList dd { + display: none; +} + +.toggleList pre { + padding: 4px 4px 4px 4px; +} + + + + + +/* COLORS */ + +pre, code { + color: #000000; +} + + +body { + color : #333333; + background-color :#FFFFFF; +} + + +h1, h2, h3, h4, h5, h6 { + color:#555; +} + +a, +.toggleList dt { + color: #1a7eb0; +} + +a:hover, +a:active { + color: #1a7eb0; +} + +a:visited, +a:link:visited { + color: #1a7eb0; +} + +td,tr { + border-color: #999999; +} + +hr { + color:#999999; + background:#999999; +} + + +.TableHeadingColor { + background: #dcdcdc; + color: #555; +} + + +.TableSubHeadingColor { + background: #EEEEFF +} + +.TableRowColor { + background: #FFFFFF +} + + +.NavBarCell1 { + background-color:#dcdcdc; + color:#000; +} + +.NavBarCell1 a { + color:#333; +} + + +.NavBarCell1Rev { + background-color:transparent; +} + +.NavBarFont1 { + color:#333; +} + + +.NavBarFont1Rev { + color:#fff; +} + +.NavBarCell2 { + background-color:#999; +} + +.NavBarCell2 a { + color:#fff; +} + + + +.NavBarCell3 { + background-color:#dcdcdc; +} + diff --git a/distribution/json4processing-0.1.3/stylesheet.css b/distribution/json4processing-0.1.3/stylesheet.css new file mode 100644 index 000000000..4348b3814 --- /dev/null +++ b/distribution/json4processing-0.1.3/stylesheet.css @@ -0,0 +1,203 @@ +/* processingLibs style by andreas schlegel, sojamo. */ + + +* { + margin:0; + padding:0; + border:0; +} + + +body { + font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; + font-size : 100%; + font-size : 0.70em; + font-weight : normal; + line-height : normal; +} + + + +#container { + margin-left:64px; + background-color:#fff; +} + +#header { + float:left; + padding-top:24px; + padding-bottom:48px; +} + +#menu { + margin-top:16px; + float:left; + margin-bottom:64px; +} + + +#about, +#download, +#examples, +#demos, +#misc { + width:480px; + float:left; + margin-right:24px; +} + + +#resources, #info { + width:320px; + float:left; +} + + +.clear { + clear:both; +} + +#footer { + margin-top:300px; + height:20px; + margin-bottom:32px; +} + + +ul { + list-style:none; + padding:0; + margin:0; +} + + +#menu ul li, #subMenu ul li { + float:left; + padding-right:6px; +} + + + + + + +/* Headings */ + +h1 { + font-size:2em; + font-weight:normal; +} + + +h2, h3, h4, h5, th { + font-size:1.3em; + font-weight:normal; + margin-bottom:4px; +} + + + +p { + font-size:1em; + width:90%; + margin-bottom:32px; +} + + +pre, code { + font-family:"Courier New", Courier, monospace; + font-size:1em; + line-height:normal; +} + + + + +hr { + border:0; + height:1px; + margin-bottom:24px; +} + + +a { + text-decoration: underline; + font-weight: normal; +} + + +a:hover, +a:active { + text-decoration: underline; + font-weight: normal; +} + + +a:visited, +a:link:visited { + text-decoration: underline; + font-weight: normal; +} + + + +img { + border: 0px solid #000000; +} + + + + + +/* COLORS */ + + +body { + color : #333; + background-color :#fff; +} + + +#header { + background-color:#fff; + color:#333; +} + + + +h1, h2, h3, h4, h5, h6 { + color:#666; +} + + +pre, code { + color: #000000; +} + + +a,strong { + color: #333; +} + + +a:hover, +a:active { + color: #333; +} + + +a:visited, +a:link:visited { + color: #333; +} + + +#footer, #menu { + background-color:#fff; + color:#333; +} + + +#footer a, #menu a { + color:#333; +} diff --git a/examples/create_jsonobject_from_httpheader/create_jsonobject_from_httpheader.pde b/examples/create_jsonobject_from_httpheader/create_jsonobject_from_httpheader.pde new file mode 100644 index 000000000..32041620c --- /dev/null +++ b/examples/create_jsonobject_from_httpheader/create_jsonobject_from_httpheader.pde @@ -0,0 +1,57 @@ +/* + * JSON 4 Processing + * Basic example 5: Parsing the HTTP header from www.processing.org + * + * This example creates a JSONObject from the HTTP response when + * contacting a website (www.processing.org). + */ +import org.json.*; +import java.net.URL; +import java.net.URLConnection; + +URL url; +URLConnection conn; + +void setup() { + // Unfortunately there's a problem in the Processing Client implementation + // that forces us to use straight Java. + try { + url = new URL("http://www.processing.org"); + conn = url.openConnection(); + } + catch( Exception e) { + } + + // We will manually add the entire HTTP reponse to this StringBuffer + // and create the JSONObject using it. + StringBuffer sb = new StringBuffer(); + + // Construct the String object using the URLConnection. + for (int i = 0;; i++) { + String name = conn.getHeaderFieldKey(i); + String value = conn.getHeaderField(i); + if (name == null && value == null) { + break; + } + if (name == null) { + // Add the value, if there is no key-value pair. + sb.append(value).append("\n"); + } + else { + // Add the key-value pair. + sb.append(name).append(":").append(value).append("\n"); + } + } + + // Create the JSON HTTP instance + HTTP http = new HTTP(); + + // Create the JSONObject using the HTTP instance + JSONObject obj = http.toJSONObject(sb.toString()); + + // Print the JSONObject + System.out.println(obj); +} +void draw() { +} + diff --git a/resources/build.properties b/resources/build.properties index cb1cd53c9..601fe77c3 100644 --- a/resources/build.properties +++ b/resources/build.properties @@ -97,7 +97,7 @@ project.compile=normal # set the current version of your project. -project.version=0.1.2 +project.version=0.1.3 project.copyright=(c) 2011 project.dependencies=? project.keywords=? diff --git a/src/org/json/HTTP.java b/src/org/json/HTTP.java index 037cf4f58..e01675bc5 100644 --- a/src/org/json/HTTP.java +++ b/src/org/json/HTTP.java @@ -68,38 +68,45 @@ public class HTTP { * of the XML string. * @throws JSONException */ - public static JSONObject toJSONObject(String string) throws JSONException { + public static JSONObject toJSONObject(String string) /*throws JSONException*/ { JSONObject jo = new JSONObject(); HTTPTokener x = new HTTPTokener(string); - String token; - - token = x.nextToken(); - if (token.toUpperCase().startsWith("HTTP")) { - -// Response - - jo.put("HTTP-Version", token); - jo.put("Status-Code", x.nextToken()); - jo.put("Reason-Phrase", x.nextTo('\0')); - x.next(); - - } else { - -// Request - - jo.put("Method", token); - jo.put("Request-URI", x.nextToken()); - jo.put("HTTP-Version", x.nextToken()); - } - -// Fields - - while (x.more()) { - String name = x.nextTo(':'); - x.next(':'); - jo.put(name, x.nextTo('\0')); - x.next(); - } + String token = null; + + try { + token = x.nextToken(); + + if (token != null && token.toUpperCase().startsWith("HTTP")) { + + // Response + + jo.put("HTTP-Version", token); + jo.put("Status-Code", x.nextToken()); + jo.put("Reason-Phrase", x.nextTo('\0')); + x.next(); + + } else { + + // Request + + jo.put("Method", token); + jo.put("Request-URI", x.nextToken()); + jo.put("HTTP-Version", x.nextToken()); + } + + // Fields + + while (x.more()) { + String name = x.nextTo(':'); + x.next(':'); + jo.put(name, x.nextTo('\0')); + x.next(); + } + + } catch (JSONException e) { + e.printStackTrace(); + } + return jo; } @@ -124,7 +131,7 @@ public static JSONObject toJSONObject(String string) throws JSONException { * @throws JSONException if the object does not contain enough * information. */ - public static String toString(JSONObject jo) throws JSONException { + public static String toString(JSONObject jo) /*throws JSONException*/ { Iterator keys = jo.keys(); String string; StringBuffer sb = new StringBuffer(); @@ -143,14 +150,18 @@ public static String toString(JSONObject jo) throws JSONException { sb.append(' '); sb.append(jo.getString("HTTP-Version")); } else { - throw new JSONException("Not enough material for an HTTP header."); + // throw new JSONException("Not enough material for an HTTP header."); } sb.append(CRLF); while (keys.hasNext()) { string = keys.next().toString(); - if (!string.equals("HTTP-Version") && !string.equals("Status-Code") && - !string.equals("Reason-Phrase") && !string.equals("Method") && - !string.equals("Request-URI") && !jo.isNull(string)) { + if (!"HTTP-Version".equals(string) && !"Status-Code".equals(string) && + !"Reason-Phrase".equals(string) && !"Method".equals(string) && + !"Request-URI".equals(string) && !jo.isNull(string)) { + // if (!string.equals("HTTP-Version") && !string.equals("Status-Code") + // && + // !string.equals("Reason-Phrase") && !string.equals("Method") && + // !string.equals("Request-URI") && !jo.isNull(string)) { sb.append(string); sb.append(": "); sb.append(jo.getString(string)); From 9f49c1730036b7e7cfa49ea05d3ad1c05e17b1e2 Mon Sep 17 00:00:00 2001 From: Tim Pulver Date: Thu, 12 Jul 2012 00:05:25 +0200 Subject: [PATCH 02/26] Added an example for saving JSON objects/arrays to a file --- .../write_jsonarray_of_objects.pde | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 examples/write_jsonarray_of_objects/write_jsonarray_of_objects.pde diff --git a/examples/write_jsonarray_of_objects/write_jsonarray_of_objects.pde b/examples/write_jsonarray_of_objects/write_jsonarray_of_objects.pde new file mode 100644 index 000000000..23de7bec0 --- /dev/null +++ b/examples/write_jsonarray_of_objects/write_jsonarray_of_objects.pde @@ -0,0 +1,56 @@ +/* + * JSON 4 Processing + * Basic example 7: Creating a JSON Array of JSON Objects and saving it to a file. + * + * Good for saving multiple complex values, such as database tables. + * + * Author: Andreas Göransson, output additions: Tim Pulver + */ + +import org.json.*; +import java.io.File; + +void setup(){ + + // Object creation like in example 3 + // ================================================= + + // 1. Initialize the Array + JSONArray myJsonUsers = new JSONArray(); + + // 2. Create the first object & add to array + JSONObject firstUser = new JSONObject(); + firstUser.put( "name", "Andreas" ); + firstUser.put( "age", 32 ); + myJsonUsers.put( firstUser ); + + // 3. Create the second object + JSONObject secondUser = new JSONObject(); + secondUser.put( "name", "Maria" ); + secondUser.put( "age", 28 ); + myJsonUsers.put( secondUser ); + + // Writing the JSON Array / Object to a file + // ================================================= + + // will store the JSON Array in the file json_output.txt within the data directory + File file = new File(dataPath("") + File.separator + "json_output.txt"); + // Create the data directory if it does not exist + file.getParentFile().mkdirs(); + try{ + // If the file already exists, it will be overwritten + FileWriter fstream = new FileWriter(file, false); + // Use this instead if you want to append the data to the file + //FileWriter fstream = new FileWriter(file, true); + BufferedWriter out = new BufferedWriter(fstream); + // do the actual writing + myJsonUsers.write(out); + // Close the stream + out.close(); + }catch (Exception e){ + System.err.println("Error writing the JSON file: " + e.getMessage()); + } +} + +void draw(){ +} From a09e1ee77661a60bb4a51b85eef979c34b8238dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20G=C3=B6ransson?= Date: Tue, 27 Nov 2012 16:20:56 +0100 Subject: [PATCH 03/26] Removed exception from JSONArray.getJSONObject() --- .../download/json4processing-0.1.4.zip | Bin 0 -> 181555 bytes .../create_jsonarray/create_jsonarray.pde | 23 + .../create_jsonarray_of_objects.pde | 31 + .../create_jsonobject/create_jsonobject.pde | 22 + .../create_jsonobject_from_httpheader.pde | 57 + .../create_jsonobject_from_string.pde | 20 + .../reading_yahoo_weather.pde | 37 + .../write_jsonarray_of_objects.pde | 56 + distribution/json4processing-0.1.4/index.html | 132 ++ .../reference/allclasses-frame.html | 32 + .../reference/allclasses-noframe.html | 32 + .../reference/constant-values.html | 141 ++ .../reference/deprecated-list.html | 112 + .../reference/help-doc.html | 209 ++ .../reference/index-all.html | 1134 ++++++++++ .../reference/index.html | 30 + .../reference/org/json/CDL.html | 470 +++++ .../reference/org/json/Cookie.html | 347 +++ .../reference/org/json/CookieList.html | 295 +++ .../reference/org/json/HTTP.html | 363 ++++ .../reference/org/json/HTTPTokener.html | 280 +++ .../reference/org/json/JSONArray.html | 1285 +++++++++++ .../reference/org/json/JSONException.html | 298 +++ .../reference/org/json/JSONML.html | 404 ++++ .../reference/org/json/JSONObject.html | 1626 ++++++++++++++ .../reference/org/json/JSONString.html | 215 ++ .../reference/org/json/JSONStringer.html | 307 +++ .../reference/org/json/JSONTokener.html | 601 ++++++ .../reference/org/json/JSONWriter.html | 474 +++++ .../reference/org/json/XML.html | 552 +++++ .../reference/org/json/XMLTokener.html | 433 ++++ .../reference/org/json/package-frame.html | 39 + .../reference/org/json/package-summary.html | 248 +++ .../reference/org/json/package-tree.html | 152 ++ .../reference/overview-tree.html | 156 ++ .../reference/package-list | 1 + .../reference/resources/background.gif | Bin 0 -> 2313 bytes .../reference/resources/tab.gif | Bin 0 -> 291 bytes .../reference/resources/titlebar.gif | Bin 0 -> 10701 bytes .../reference/resources/titlebar_end.gif | Bin 0 -> 849 bytes .../reference/serialized-form.html | 142 ++ .../reference/stylesheet.css | 310 +++ .../json4processing-0.1.4/stylesheet.css | 203 ++ resources/build.properties | 248 +-- src/org/json/JSONArray.java | 1873 +++++++++-------- 45 files changed, 12335 insertions(+), 1055 deletions(-) create mode 100644 distribution/json4processing-0.1.4/download/json4processing-0.1.4.zip create mode 100644 distribution/json4processing-0.1.4/examples/create_jsonarray/create_jsonarray.pde create mode 100644 distribution/json4processing-0.1.4/examples/create_jsonarray_of_objects/create_jsonarray_of_objects.pde create mode 100644 distribution/json4processing-0.1.4/examples/create_jsonobject/create_jsonobject.pde create mode 100644 distribution/json4processing-0.1.4/examples/create_jsonobject_from_httpheader/create_jsonobject_from_httpheader.pde create mode 100644 distribution/json4processing-0.1.4/examples/create_jsonobject_from_string/create_jsonobject_from_string.pde create mode 100644 distribution/json4processing-0.1.4/examples/reading_yahoo_weather/reading_yahoo_weather.pde create mode 100644 distribution/json4processing-0.1.4/examples/write_jsonarray_of_objects/write_jsonarray_of_objects.pde create mode 100644 distribution/json4processing-0.1.4/index.html create mode 100644 distribution/json4processing-0.1.4/reference/allclasses-frame.html create mode 100644 distribution/json4processing-0.1.4/reference/allclasses-noframe.html create mode 100644 distribution/json4processing-0.1.4/reference/constant-values.html create mode 100644 distribution/json4processing-0.1.4/reference/deprecated-list.html create mode 100644 distribution/json4processing-0.1.4/reference/help-doc.html create mode 100644 distribution/json4processing-0.1.4/reference/index-all.html create mode 100644 distribution/json4processing-0.1.4/reference/index.html create mode 100644 distribution/json4processing-0.1.4/reference/org/json/CDL.html create mode 100644 distribution/json4processing-0.1.4/reference/org/json/Cookie.html create mode 100644 distribution/json4processing-0.1.4/reference/org/json/CookieList.html create mode 100644 distribution/json4processing-0.1.4/reference/org/json/HTTP.html create mode 100644 distribution/json4processing-0.1.4/reference/org/json/HTTPTokener.html create mode 100644 distribution/json4processing-0.1.4/reference/org/json/JSONArray.html create mode 100644 distribution/json4processing-0.1.4/reference/org/json/JSONException.html create mode 100644 distribution/json4processing-0.1.4/reference/org/json/JSONML.html create mode 100644 distribution/json4processing-0.1.4/reference/org/json/JSONObject.html create mode 100644 distribution/json4processing-0.1.4/reference/org/json/JSONString.html create mode 100644 distribution/json4processing-0.1.4/reference/org/json/JSONStringer.html create mode 100644 distribution/json4processing-0.1.4/reference/org/json/JSONTokener.html create mode 100644 distribution/json4processing-0.1.4/reference/org/json/JSONWriter.html create mode 100644 distribution/json4processing-0.1.4/reference/org/json/XML.html create mode 100644 distribution/json4processing-0.1.4/reference/org/json/XMLTokener.html create mode 100644 distribution/json4processing-0.1.4/reference/org/json/package-frame.html create mode 100644 distribution/json4processing-0.1.4/reference/org/json/package-summary.html create mode 100644 distribution/json4processing-0.1.4/reference/org/json/package-tree.html create mode 100644 distribution/json4processing-0.1.4/reference/overview-tree.html create mode 100644 distribution/json4processing-0.1.4/reference/package-list create mode 100644 distribution/json4processing-0.1.4/reference/resources/background.gif create mode 100644 distribution/json4processing-0.1.4/reference/resources/tab.gif create mode 100644 distribution/json4processing-0.1.4/reference/resources/titlebar.gif create mode 100644 distribution/json4processing-0.1.4/reference/resources/titlebar_end.gif create mode 100644 distribution/json4processing-0.1.4/reference/serialized-form.html create mode 100644 distribution/json4processing-0.1.4/reference/stylesheet.css create mode 100644 distribution/json4processing-0.1.4/stylesheet.css diff --git a/distribution/json4processing-0.1.4/download/json4processing-0.1.4.zip b/distribution/json4processing-0.1.4/download/json4processing-0.1.4.zip new file mode 100644 index 0000000000000000000000000000000000000000..ddb6d7d1365af6dd48691f96edabdb67133aea09 GIT binary patch literal 181555 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

!Lwk{2 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 + + +json4processing + + + + + + + + + + + + + + +

+ + \ No newline at end of file diff --git a/distribution/json4processing-0.1.4/reference/allclasses-frame.html b/distribution/json4processing-0.1.4/reference/allclasses-frame.html new file mode 100644 index 000000000..a8a527abe --- /dev/null +++ b/distribution/json4processing-0.1.4/reference/allclasses-frame.html @@ -0,0 +1,32 @@ + + + + + +All Classes (Javadocs: json4processing) + + + + +

All Classes

+ + + diff --git a/distribution/json4processing-0.1.4/reference/allclasses-noframe.html b/distribution/json4processing-0.1.4/reference/allclasses-noframe.html new file mode 100644 index 000000000..25363b7d2 --- /dev/null +++ b/distribution/json4processing-0.1.4/reference/allclasses-noframe.html @@ -0,0 +1,32 @@ + + + + + +All Classes (Javadocs: json4processing) + + + + +

All Classes

+ + + diff --git a/distribution/json4processing-0.1.4/reference/constant-values.html b/distribution/json4processing-0.1.4/reference/constant-values.html new file mode 100644 index 000000000..047c4c984 --- /dev/null +++ b/distribution/json4processing-0.1.4/reference/constant-values.html @@ -0,0 +1,141 @@ + + + + + +Constant Field Values (Javadocs: json4processing) + + + + + + + + + + +
+

Constant Field Values

+

Contents

+ +
+
+ + +

org.json.*

+
    +
  • + + + + + + + + + + + + + + +
    org.json.HTTP 
    Modifier and TypeConstant FieldValue
    + +public static final java.lang.StringCRLF"\r\n"
    +
  • +
+
+ + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.4/reference/deprecated-list.html b/distribution/json4processing-0.1.4/reference/deprecated-list.html new file mode 100644 index 000000000..aae938f36 --- /dev/null +++ b/distribution/json4processing-0.1.4/reference/deprecated-list.html @@ -0,0 +1,112 @@ + + + + + +Deprecated List (Javadocs: json4processing) + + + + + + + +
+ + + + + +
+ + +
+

Deprecated API

+

Contents

+
+ +
+ + + + + +
+ + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.4/reference/help-doc.html b/distribution/json4processing-0.1.4/reference/help-doc.html new file mode 100644 index 000000000..44693123d --- /dev/null +++ b/distribution/json4processing-0.1.4/reference/help-doc.html @@ -0,0 +1,209 @@ + + + + + +API Help (Javadocs: json4processing) + + + + + + + +
+ + + + + +
+ + +
+

How This API Document Is Organized

+
This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.
+
+
+
    +
  • +

    Package

    +

    Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain six categories:

    +
      +
    • Interfaces (italic)
    • +
    • Classes
    • +
    • Enums
    • +
    • Exceptions
    • +
    • Errors
    • +
    • Annotation Types
    • +
    +
  • +
  • +

    Class/Interface

    +

    Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

    +
      +
    • Class inheritance diagram
    • +
    • Direct Subclasses
    • +
    • All Known Subinterfaces
    • +
    • All Known Implementing Classes
    • +
    • Class/interface declaration
    • +
    • Class/interface description
    • +
    +
      +
    • Nested Class Summary
    • +
    • Field Summary
    • +
    • Constructor Summary
    • +
    • Method Summary
    • +
    +
      +
    • Field Detail
    • +
    • Constructor Detail
    • +
    • Method Detail
    • +
    +

    Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

    +
  • +
  • +

    Annotation Type

    +

    Each annotation type has its own separate page with the following sections:

    +
      +
    • Annotation Type declaration
    • +
    • Annotation Type description
    • +
    • Required Element Summary
    • +
    • Optional Element Summary
    • +
    • Element Detail
    • +
    +
  • +
  • +

    Enum

    +

    Each enum has its own separate page with the following sections:

    +
      +
    • Enum declaration
    • +
    • Enum description
    • +
    • Enum Constant Summary
    • +
    • Enum Constant Detail
    • +
    +
  • +
  • +

    Tree (Class Hierarchy)

    +

    There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.

    +
      +
    • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
    • +
    • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
    • +
    +
  • +
  • +

    Deprecated API

    +

    The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.

    +
  • +
  • +

    Index

    +

    The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.

    +
  • +
  • +

    Prev/Next

    +

    These links take you to the next or previous class, interface, package, or related page.

    +
  • +
  • +

    Frames/No Frames

    +

    These links show and hide the HTML frames. All pages are available with or without frames.

    +
  • +
  • +

    All Classes

    +

    The All Classes link shows all classes and interfaces except non-static nested types.

    +
  • +
  • +

    Serialized Form

    +

    Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.

    +
  • +
  • +

    Constant Field Values

    +

    The Constant Field Values page lists the static final fields and their values.

    +
  • +
+This help file applies to API documentation generated using the standard doclet.
+ +
+ + + + + +
+ + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.4/reference/index-all.html b/distribution/json4processing-0.1.4/reference/index-all.html new file mode 100644 index 000000000..805159f7d --- /dev/null +++ b/distribution/json4processing-0.1.4/reference/index-all.html @@ -0,0 +1,1134 @@ + + + + + +Index (Javadocs: json4processing) + + + + + + + +
+ + + + + +
+ + +
A B C D E G H I J K L M N O P Q R S T U V W X  + + +

A

+
+
accumulate(String, Object) - Method in class org.json.JSONObject
+
+
Accumulate values under a key.
+
+
AMP - Static variable in class org.json.XML
+
+
The Character '&'.
+
+
APOS - Static variable in class org.json.XML
+
+
The Character '''.
+
+
append(String, Object) - Method in class org.json.JSONObject
+
+
Append values to the array under a key.
+
+
array() - Method in class org.json.JSONWriter
+
+
Begin appending a new array.
+
+
+ + + +

B

+
+
back() - Method in class org.json.JSONTokener
+
+
Back up one character.
+
+
BANG - Static variable in class org.json.XML
+
+
The Character '!'.
+
+
+ + + +

C

+
+
CDL - Class in org.json
+
+
This provides static methods to convert comma delimited text into a + JSONArray, and to covert a JSONArray into comma delimited text.
+
+
CDL() - Constructor for class org.json.CDL
+
 
+
Cookie - Class in org.json
+
+
Convert a web browser cookie specification to a JSONObject and back.
+
+
Cookie() - Constructor for class org.json.Cookie
+
 
+
CookieList - Class in org.json
+
+
Convert a web browser cookie list string to a JSONObject and back.
+
+
CookieList() - Constructor for class org.json.CookieList
+
 
+
CRLF - Static variable in class org.json.HTTP
+
+
Carriage return/line feed.
+
+
+ + + +

D

+
+
dehexchar(char) - Static method in class org.json.JSONTokener
+
+
Get the hex value of a character (base16).
+
+
doubleToString(double) - Static method in class org.json.JSONObject
+
+
Produce a string from a double.
+
+
+ + + +

E

+
+
end() - Method in class org.json.JSONTokener
+
 
+
endArray() - Method in class org.json.JSONWriter
+
+
End an array.
+
+
endObject() - Method in class org.json.JSONWriter
+
+
End an object.
+
+
entity - Static variable in class org.json.XMLTokener
+
+
The table of entity values.
+
+
EQ - Static variable in class org.json.XML
+
+
The Character '='.
+
+
escape(String) - Static method in class org.json.Cookie
+
+
Produce a copy of a string in which the characters '+', '%', '=', ';' + and control characters are replaced with "%hh".
+
+
escape(String) - Static method in class org.json.XML
+
+
Replace special characters with XML escapes:
+
+
+ + + +

G

+
+
get(int) - Method in class org.json.JSONArray
+
+
Get the object value associated with an index.
+
+
get(String) - Method in class org.json.JSONObject
+
+
Get the value object associated with a key.
+
+
getBoolean(int) - Method in class org.json.JSONArray
+
+
Get the boolean value associated with an index.
+
+
getBoolean(String) - Method in class org.json.JSONObject
+
+
Get the boolean value associated with a key.
+
+
getCause() - Method in exception org.json.JSONException
+
 
+
getDouble(int) - Method in class org.json.JSONArray
+
+
Get the double value associated with an index.
+
+
getDouble(String) - Method in class org.json.JSONObject
+
+
Get the double value associated with a key.
+
+
getInt(int) - Method in class org.json.JSONArray
+
+
Get the int value associated with an index.
+
+
getInt(String) - Method in class org.json.JSONObject
+
+
Get the int value associated with a key.
+
+
getJSONArray(int) - Method in class org.json.JSONArray
+
+
Get the JSONArray associated with an index.
+
+
getJSONArray(String) - Method in class org.json.JSONObject
+
+
Get the JSONArray value associated with a key.
+
+
getJSONObject(int) - Method in class org.json.JSONArray
+
+
Get the JSONObject associated with an index.
+
+
getJSONObject(String) - Method in class org.json.JSONObject
+
+
Get the JSONObject value associated with a key.
+
+
getLong(int) - Method in class org.json.JSONArray
+
+
Get the long value associated with an index.
+
+
getLong(String) - Method in class org.json.JSONObject
+
+
Get the long value associated with a key.
+
+
getNames(JSONObject) - Static method in class org.json.JSONObject
+
+
Get an array of field names from a JSONObject.
+
+
getNames(Object) - Static method in class org.json.JSONObject
+
+
Get an array of field names from an Object.
+
+
getString(int) - Method in class org.json.JSONArray
+
+
Get the string associated with an index.
+
+
getString(String) - Method in class org.json.JSONObject
+
+
Get the string associated with a key.
+
+
GT - Static variable in class org.json.XML
+
+
The Character '>'.
+
+
+ + + +

H

+
+
has(String) - Method in class org.json.JSONObject
+
+
Determine if the JSONObject contains a specific key.
+
+
HTTP - Class in org.json
+
+
Convert an HTTP header to a JSONObject and back.
+
+
HTTP() - Constructor for class org.json.HTTP
+
 
+
HTTPTokener - Class in org.json
+
+
The HTTPTokener extends the JSONTokener to provide additional methods + for the parsing of HTTP headers.
+
+
HTTPTokener(String) - Constructor for class org.json.HTTPTokener
+
+
Construct an HTTPTokener from a string.
+
+
+ + + +

I

+
+
increment(String) - Method in class org.json.JSONObject
+
+
Increment a property of a JSONObject.
+
+
isNull(int) - Method in class org.json.JSONArray
+
+
Determine if the value is null.
+
+
isNull(String) - Method in class org.json.JSONObject
+
+
Determine if the value associated with the key is null or if there is no + value.
+
+
+ + + +

J

+
+
join(String) - Method in class org.json.JSONArray
+
+
Make a string from the contents of this JSONArray.
+
+
JSONArray - Class in org.json
+
+
A JSONArray is an ordered sequence of values.
+
+
JSONArray() - Constructor for class org.json.JSONArray
+
+
Construct an empty JSONArray.
+
+
JSONArray(JSONTokener) - Constructor for class org.json.JSONArray
+
+
Construct a JSONArray from a JSONTokener.
+
+
JSONArray(String) - Constructor for class org.json.JSONArray
+
+
Construct a JSONArray from a source JSON text.
+
+
JSONArray(Collection) - Constructor for class org.json.JSONArray
+
+
Construct a JSONArray from a Collection.
+
+
JSONArray(Object) - Constructor for class org.json.JSONArray
+
+
Construct a JSONArray from an array
+
+
JSONException - Exception in org.json
+
+
The JSONException is thrown by the JSON.org classes when things are amiss.
+
+
JSONException(String) - Constructor for exception org.json.JSONException
+
+
Constructs a JSONException with an explanatory message.
+
+
JSONException(Throwable) - Constructor for exception org.json.JSONException
+
 
+
JSONML - Class in org.json
+
+
This provides static methods to convert an XML text into a JSONArray or + JSONObject, and to covert a JSONArray or JSONObject into an XML text using + the JsonML transform.
+
+
JSONML() - Constructor for class org.json.JSONML
+
 
+
JSONObject - Class in org.json
+
+
A JSONObject is an unordered collection of name/value pairs.
+
+
JSONObject() - Constructor for class org.json.JSONObject
+
+
Construct an empty JSONObject.
+
+
JSONObject(JSONObject, String[]) - Constructor for class org.json.JSONObject
+
+
Construct a JSONObject from a subset of another JSONObject.
+
+
JSONObject(JSONTokener) - Constructor for class org.json.JSONObject
+
+
Construct a JSONObject from a JSONTokener.
+
+
JSONObject(Map) - Constructor for class org.json.JSONObject
+
+
Construct a JSONObject from a Map.
+
+
JSONObject(Object) - Constructor for class org.json.JSONObject
+
+
Construct a JSONObject from an Object using bean getters.
+
+
JSONObject(Object, String[]) - Constructor for class org.json.JSONObject
+
+
Construct a JSONObject from an Object, using reflection to find the + public members.
+
+
JSONObject(String) - Constructor for class org.json.JSONObject
+
+
Construct a JSONObject from a source JSON text string.
+
+
JSONObject(String, Locale) - Constructor for class org.json.JSONObject
+
+
Construct a JSONObject from a ResourceBundle.
+
+
JSONString - Interface in org.json
+
+
The JSONString interface allows a toJSONString() + method so that a class can change the behavior of + JSONObject.toString(), JSONArray.toString(), + and JSONWriter.value(Object).
+
+
JSONStringer - Class in org.json
+
+
JSONStringer provides a quick and convenient way of producing JSON text.
+
+
JSONStringer() - Constructor for class org.json.JSONStringer
+
+
Make a fresh JSONStringer.
+
+
JSONTokener - Class in org.json
+
+
A JSONTokener takes a source string and extracts characters and tokens from + it.
+
+
JSONTokener(Reader) - Constructor for class org.json.JSONTokener
+
+
Construct a JSONTokener from a Reader.
+
+
JSONTokener(InputStream) - Constructor for class org.json.JSONTokener
+
+
Construct a JSONTokener from an InputStream.
+
+
JSONTokener(String) - Constructor for class org.json.JSONTokener
+
+
Construct a JSONTokener from a string.
+
+
JSONWriter - Class in org.json
+
+
JSONWriter provides a quick and convenient way of producing JSON text.
+
+
JSONWriter(Writer) - Constructor for class org.json.JSONWriter
+
+
Make a fresh JSONWriter.
+
+
+ + + +

K

+
+
key(String) - Method in class org.json.JSONWriter
+
+
Append a key.
+
+
keys() - Method in class org.json.JSONObject
+
+
Get an enumeration of the keys of the JSONObject.
+
+
+ + + +

L

+
+
length() - Method in class org.json.JSONArray
+
+
Get the number of elements in the JSONArray, included nulls.
+
+
length() - Method in class org.json.JSONObject
+
+
Get the number of keys stored in the JSONObject.
+
+
LT - Static variable in class org.json.XML
+
+
The Character '<'.
+
+
+ + + +

M

+
+
more() - Method in class org.json.JSONTokener
+
+
Determine if the source string still contains characters that next() + can consume.
+
+
+ + + +

N

+
+
names() - Method in class org.json.JSONObject
+
+
Produce a JSONArray containing the names of the elements of this + JSONObject.
+
+
next() - Method in class org.json.JSONTokener
+
+
Get the next character in the source string.
+
+
next(char) - Method in class org.json.JSONTokener
+
+
Consume the next character, and check that it matches a specified + character.
+
+
next(int) - Method in class org.json.JSONTokener
+
+
Get the next n characters.
+
+
nextCDATA() - Method in class org.json.XMLTokener
+
+
Get the text in the CDATA block.
+
+
nextClean() - Method in class org.json.JSONTokener
+
+
Get the next char in the string, skipping whitespace.
+
+
nextContent() - Method in class org.json.XMLTokener
+
+
Get the next XML outer token, trimming whitespace.
+
+
nextEntity(char) - Method in class org.json.XMLTokener
+
+
Return the next entity.
+
+
nextMeta() - Method in class org.json.XMLTokener
+
+
Returns the next XML meta token.
+
+
nextString(char) - Method in class org.json.JSONTokener
+
+
Return the characters up to the next close quote character.
+
+
nextTo(char) - Method in class org.json.JSONTokener
+
+
Get the text up but not including the specified character or the + end of line, whichever comes first.
+
+
nextTo(String) - Method in class org.json.JSONTokener
+
+
Get the text up but not including one of the specified delimiter + characters or the end of line, whichever comes first.
+
+
nextToken() - Method in class org.json.HTTPTokener
+
+
Get the next token or string.
+
+
nextToken() - Method in class org.json.XMLTokener
+
+
Get the next XML Token.
+
+
nextValue() - Method in class org.json.JSONTokener
+
+
Get the next value.
+
+
noSpace(String) - Static method in class org.json.XML
+
+
Throw an exception if the string contains whitespace.
+
+
NULL - Static variable in class org.json.JSONObject
+
+
It is sometimes more convenient and less ambiguous to have a + NULL object than to use Java's null value.
+
+
numberToString(Number) - Static method in class org.json.JSONObject
+
+
Produce a string from a Number.
+
+
+ + + +

O

+
+
object() - Method in class org.json.JSONWriter
+
+
Begin appending a new object.
+
+
opt(int) - Method in class org.json.JSONArray
+
+
Get the optional object value associated with an index.
+
+
opt(String) - Method in class org.json.JSONObject
+
+
Get an optional value associated with a key.
+
+
optBoolean(int) - Method in class org.json.JSONArray
+
+
Get the optional boolean value associated with an index.
+
+
optBoolean(int, boolean) - Method in class org.json.JSONArray
+
+
Get the optional boolean value associated with an index.
+
+
optBoolean(String) - Method in class org.json.JSONObject
+
+
Get an optional boolean associated with a key.
+
+
optBoolean(String, boolean) - Method in class org.json.JSONObject
+
+
Get an optional boolean associated with a key.
+
+
optDouble(int) - Method in class org.json.JSONArray
+
+
Get the optional double value associated with an index.
+
+
optDouble(int, double) - Method in class org.json.JSONArray
+
+
Get the optional double value associated with an index.
+
+
optDouble(String) - Method in class org.json.JSONObject
+
+
Get an optional double associated with a key, or NaN if there is no such + key or if its value is not a number.
+
+
optDouble(String, double) - Method in class org.json.JSONObject
+
+
Get an optional double associated with a key, or the defaultValue if + there is no such key or if its value is not a number.
+
+
optInt(int) - Method in class org.json.JSONArray
+
+
Get the optional int value associated with an index.
+
+
optInt(int, int) - Method in class org.json.JSONArray
+
+
Get the optional int value associated with an index.
+
+
optInt(String) - Method in class org.json.JSONObject
+
+
Get an optional int value associated with a key, or zero if there is no + such key or if the value is not a number.
+
+
optInt(String, int) - Method in class org.json.JSONObject
+
+
Get an optional int value associated with a key, or the default if there + is no such key or if the value is not a number.
+
+
optJSONArray(int) - Method in class org.json.JSONArray
+
+
Get the optional JSONArray associated with an index.
+
+
optJSONArray(String) - Method in class org.json.JSONObject
+
+
Get an optional JSONArray associated with a key.
+
+
optJSONObject(int) - Method in class org.json.JSONArray
+
+
Get the optional JSONObject associated with an index.
+
+
optJSONObject(String) - Method in class org.json.JSONObject
+
+
Get an optional JSONObject associated with a key.
+
+
optLong(int) - Method in class org.json.JSONArray
+
+
Get the optional long value associated with an index.
+
+
optLong(int, long) - Method in class org.json.JSONArray
+
+
Get the optional long value associated with an index.
+
+
optLong(String) - Method in class org.json.JSONObject
+
+
Get an optional long value associated with a key, or zero if there is no + such key or if the value is not a number.
+
+
optLong(String, long) - Method in class org.json.JSONObject
+
+
Get an optional long value associated with a key, or the default if there + is no such key or if the value is not a number.
+
+
optString(int) - Method in class org.json.JSONArray
+
+
Get the optional string value associated with an index.
+
+
optString(int, String) - Method in class org.json.JSONArray
+
+
Get the optional string associated with an index.
+
+
optString(String) - Method in class org.json.JSONObject
+
+
Get an optional string associated with a key.
+
+
optString(String, String) - Method in class org.json.JSONObject
+
+
Get an optional string associated with a key.
+
+
org.json - package org.json
+
 
+
+ + + +

P

+
+
put(boolean) - Method in class org.json.JSONArray
+
+
Append a boolean value.
+
+
put(Collection) - Method in class org.json.JSONArray
+
+
Put a value in the JSONArray, where the value will be a + JSONArray which is produced from a Collection.
+
+
put(double) - Method in class org.json.JSONArray
+
+
Append a double value.
+
+
put(int) - Method in class org.json.JSONArray
+
+
Append an int value.
+
+
put(long) - Method in class org.json.JSONArray
+
+
Append an long value.
+
+
put(Map) - Method in class org.json.JSONArray
+
+
Put a value in the JSONArray, where the value will be a + JSONObject which is produced from a Map.
+
+
put(Object) - Method in class org.json.JSONArray
+
+
Append an object value.
+
+
put(int, boolean) - Method in class org.json.JSONArray
+
+
Put or replace a boolean value in the JSONArray.
+
+
put(int, Collection) - Method in class org.json.JSONArray
+
+
Put a value in the JSONArray, where the value will be a + JSONArray which is produced from a Collection.
+
+
put(int, double) - Method in class org.json.JSONArray
+
+
Put or replace a double value.
+
+
put(int, int) - Method in class org.json.JSONArray
+
+
Put or replace an int value.
+
+
put(int, long) - Method in class org.json.JSONArray
+
+
Put or replace a long value.
+
+
put(int, Map) - Method in class org.json.JSONArray
+
+
Put a value in the JSONArray, where the value will be a + JSONObject that is produced from a Map.
+
+
put(int, Object) - Method in class org.json.JSONArray
+
+
Put or replace an object value in the JSONArray.
+
+
put(String, boolean) - Method in class org.json.JSONObject
+
+
Put a key/boolean pair in the JSONObject.
+
+
put(String, Collection) - Method in class org.json.JSONObject
+
+
Put a key/value pair in the JSONObject, where the value will be a + JSONArray which is produced from a Collection.
+
+
put(String, double) - Method in class org.json.JSONObject
+
+
Put a key/double pair in the JSONObject.
+
+
put(String, int) - Method in class org.json.JSONObject
+
+
Put a key/int pair in the JSONObject.
+
+
put(String, long) - Method in class org.json.JSONObject
+
+
Put a key/long pair in the JSONObject.
+
+
put(String, Map) - Method in class org.json.JSONObject
+
+
Put a key/value pair in the JSONObject, where the value will be a + JSONObject which is produced from a Map.
+
+
put(String, Object) - Method in class org.json.JSONObject
+
+
Put a key/value pair in the JSONObject.
+
+
putOnce(String, Object) - Method in class org.json.JSONObject
+
+
Put a key/value pair in the JSONObject, but only if the key and the value + are both non-null, and only if there is not already a member with that + name.
+
+
putOpt(String, Object) - Method in class org.json.JSONObject
+
+
Put a key/value pair in the JSONObject, but only if the key and the value + are both non-null.
+
+
+ + + +

Q

+
+
QUEST - Static variable in class org.json.XML
+
+
The Character '?'.
+
+
QUOT - Static variable in class org.json.XML
+
+
The Character '"'.
+
+
quote(String) - Static method in class org.json.JSONObject
+
+
Produce a string in double quotes with backslash sequences in all the + right places.
+
+
+ + + +

R

+
+
remove(int) - Method in class org.json.JSONArray
+
+
Remove an index and close the hole.
+
+
remove(String) - Method in class org.json.JSONObject
+
+
Remove a name and its value, if present.
+
+
rowToJSONArray(JSONTokener) - Static method in class org.json.CDL
+
+
Produce a JSONArray of strings from a row of comma delimited values.
+
+
rowToJSONObject(JSONArray, JSONTokener) - Static method in class org.json.CDL
+
+
Produce a JSONObject from a row of comma delimited text, using a + parallel JSONArray of strings to provides the names of the elements.
+
+
rowToString(JSONArray) - Static method in class org.json.CDL
+
+
Produce a comma delimited text row from a JSONArray.
+
+
+ + + +

S

+
+
skipPast(String) - Method in class org.json.XMLTokener
+
+
Skip characters until past the requested string.
+
+
skipTo(char) - Method in class org.json.JSONTokener
+
+
Skip characters until the next character is the requested character.
+
+
SLASH - Static variable in class org.json.XML
+
+
The Character '/'.
+
+
stringToValue(String) - Static method in class org.json.JSONObject
+
+
Try to convert a string into a number, boolean, or null.
+
+
stringToValue(String) - Static method in class org.json.XML
+
+
Try to convert a string into a number, boolean, or null.
+
+
syntaxError(String) - Method in class org.json.JSONTokener
+
+
Make a JSONException to signal a syntax error.
+
+
+ + + +

T

+
+
testValidity(Object) - Static method in class org.json.JSONObject
+
+
Throw an exception if the object is a NaN or infinite number.
+
+
toJSONArray(String) - Static method in class org.json.CDL
+
+
Produce a JSONArray of JSONObjects from a comma delimited text string, + using the first row as a source of names.
+
+
toJSONArray(JSONTokener) - Static method in class org.json.CDL
+
+
Produce a JSONArray of JSONObjects from a comma delimited text string, + using the first row as a source of names.
+
+
toJSONArray(JSONArray, String) - Static method in class org.json.CDL
+
+
Produce a JSONArray of JSONObjects from a comma delimited text string + using a supplied JSONArray as the source of element names.
+
+
toJSONArray(JSONArray, JSONTokener) - Static method in class org.json.CDL
+
+
Produce a JSONArray of JSONObjects from a comma delimited text string + using a supplied JSONArray as the source of element names.
+
+
toJSONArray(String) - Static method in class org.json.JSONML
+
+
Convert a well-formed (but not necessarily valid) XML string into a + JSONArray using the JsonML transform.
+
+
toJSONArray(XMLTokener) - Static method in class org.json.JSONML
+
+
Convert a well-formed (but not necessarily valid) XML string into a + JSONArray using the JsonML transform.
+
+
toJSONArray(JSONArray) - Method in class org.json.JSONObject
+
+
Produce a JSONArray containing the values of the members of this + JSONObject.
+
+
toJSONObject(String) - Static method in class org.json.Cookie
+
+
Convert a cookie specification string into a JSONObject.
+
+
toJSONObject(String) - Static method in class org.json.CookieList
+
+
Convert a cookie list into a JSONObject.
+
+
toJSONObject(String) - Static method in class org.json.HTTP
+
+
Convert an HTTP header string into a JSONObject.
+
+
toJSONObject(JSONArray) - Method in class org.json.JSONArray
+
+
Produce a JSONObject by combining a JSONArray of names with the values + of this JSONArray.
+
+
toJSONObject(XMLTokener) - Static method in class org.json.JSONML
+
+
Convert a well-formed (but not necessarily valid) XML string into a + JSONObject using the JsonML transform.
+
+
toJSONObject(String) - Static method in class org.json.JSONML
+
+
Convert a well-formed (but not necessarily valid) XML string into a + JSONObject using the JsonML transform.
+
+
toJSONObject(String) - Static method in class org.json.XML
+
+
Convert a well-formed (but not necessarily valid) XML string into a + JSONObject.
+
+
toJSONString() - Method in interface org.json.JSONString
+
+
The toJSONString method allows a class to produce its own JSON + serialization.
+
+
toString(JSONArray) - Static method in class org.json.CDL
+
+
Produce a comma delimited text from a JSONArray of JSONObjects.
+
+
toString(JSONArray, JSONArray) - Static method in class org.json.CDL
+
+
Produce a comma delimited text from a JSONArray of JSONObjects using + a provided list of names.
+
+
toString(JSONObject) - Static method in class org.json.Cookie
+
+
Convert a JSONObject into a cookie specification string.
+
+
toString(JSONObject) - Static method in class org.json.CookieList
+
+
Convert a JSONObject into a cookie list.
+
+
toString(JSONObject) - Static method in class org.json.HTTP
+
+
Convert a JSONObject into an HTTP header.
+
+
toString() - Method in class org.json.JSONArray
+
+
Make a JSON text of this JSONArray.
+
+
toString(int) - Method in class org.json.JSONArray
+
+
Make a prettyprinted JSON text of this JSONArray.
+
+
toString(JSONArray) - Static method in class org.json.JSONML
+
+
Reverse the JSONML transformation, making an XML text from a JSONArray.
+
+
toString(JSONObject) - Static method in class org.json.JSONML
+
+
Reverse the JSONML transformation, making an XML text from a JSONObject.
+
+
toString() - Method in class org.json.JSONObject
+
+
Make a JSON text of this JSONObject.
+
+
toString(int) - Method in class org.json.JSONObject
+
+
Make a prettyprinted JSON text of this JSONObject.
+
+
toString() - Method in class org.json.JSONStringer
+
+
Return the JSON text.
+
+
toString() - Method in class org.json.JSONTokener
+
+
Make a printable string of this JSONTokener.
+
+
toString(Object) - Static method in class org.json.XML
+
+
Convert a JSONObject into a well-formed, element-normal XML string.
+
+
toString(Object, String) - Static method in class org.json.XML
+
+
Convert a JSONObject into a well-formed, element-normal XML string.
+
+
+ + + +

U

+
+
unescape(String) - Static method in class org.json.Cookie
+
+
Convert %hh sequences to single characters, and + convert plus to space.
+
+
+ + + +

V

+
+
value(boolean) - Method in class org.json.JSONWriter
+
+
Append either the value true or the value + false.
+
+
value(double) - Method in class org.json.JSONWriter
+
+
Append a double value.
+
+
value(long) - Method in class org.json.JSONWriter
+
+
Append a long value.
+
+
value(Object) - Method in class org.json.JSONWriter
+
+
Append an object value.
+
+
valueToString(Object) - Static method in class org.json.JSONObject
+
+
Make a JSON text of an Object value.
+
+
+ + + +

W

+
+
wrap(Object) - Static method in class org.json.JSONObject
+
+
Wrap an object, if necessary.
+
+
write(Writer) - Method in class org.json.JSONArray
+
+
Write the contents of the JSONArray as JSON text to a writer.
+
+
write(Writer) - Method in class org.json.JSONObject
+
+
Write the contents of the JSONObject as JSON text to a writer.
+
+
+ + + +

X

+
+
XML - Class in org.json
+
+
This provides static methods to convert an XML text into a JSONObject, + and to covert a JSONObject into an XML text.
+
+
XML() - Constructor for class org.json.XML
+
 
+
XMLTokener - Class in org.json
+
+
The XMLTokener extends the JSONTokener to provide additional methods + for the parsing of XML texts.
+
+
XMLTokener(String) - Constructor for class org.json.XMLTokener
+
+
Construct an XMLTokener from a string.
+
+
+A B C D E G H I J K L M N O P Q R S T U V W X 
+ +
+ + + + + +
+ + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.4/reference/index.html b/distribution/json4processing-0.1.4/reference/index.html new file mode 100644 index 000000000..b449b28b3 --- /dev/null +++ b/distribution/json4processing-0.1.4/reference/index.html @@ -0,0 +1,30 @@ + + + + + +Javadocs: json4processing + + + + + + +<noscript> +<div>JavaScript is disabled on your browser.</div> +</noscript> +<h2>Frame Alert</h2> +<p>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. Link to <a href="org/json/package-summary.html">Non-frame version</a>.</p> + + + diff --git a/distribution/json4processing-0.1.4/reference/org/json/CDL.html b/distribution/json4processing-0.1.4/reference/org/json/CDL.html new file mode 100644 index 000000000..f07ac85b1 --- /dev/null +++ b/distribution/json4processing-0.1.4/reference/org/json/CDL.html @@ -0,0 +1,470 @@ + + + + + +CDL (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class CDL

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.json.CDL
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class CDL
    +extends java.lang.Object
    +
    This provides static methods to convert comma delimited text into a + JSONArray, and to covert a JSONArray into comma delimited text. Comma + delimited text is a very popular format for data interchange. It is + understood by most database, spreadsheet, and organizer programs. +

    + Each row of text represents a row in a table or a data record. Each row + ends with a NEWLINE character. Each row contains one or more values. + Values are separated by commas. A value can contain any character except + for comma, unless is is wrapped in single quotes or double quotes. +

    + The first row usually contains the names of the columns. +

    + A comma delimited list can be converted into a JSONArray of JSONObjects. + The names for the elements in the JSONObjects can be taken from the names + in the first row.

    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      CDL() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      static JSONArrayrowToJSONArray(JSONTokener x) +
      Produce a JSONArray of strings from a row of comma delimited values.
      +
      static JSONObjectrowToJSONObject(JSONArray names, + JSONTokener x) +
      Produce a JSONObject from a row of comma delimited text, using a + parallel JSONArray of strings to provides the names of the elements.
      +
      static java.lang.StringrowToString(JSONArray ja) +
      Produce a comma delimited text row from a JSONArray.
      +
      static JSONArraytoJSONArray(JSONArray names, + JSONTokener x) +
      Produce a JSONArray of JSONObjects from a comma delimited text string + using a supplied JSONArray as the source of element names.
      +
      static JSONArraytoJSONArray(JSONArray names, + java.lang.String string) +
      Produce a JSONArray of JSONObjects from a comma delimited text string + using a supplied JSONArray as the source of element names.
      +
      static JSONArraytoJSONArray(JSONTokener x) +
      Produce a JSONArray of JSONObjects from a comma delimited text string, + using the first row as a source of names.
      +
      static JSONArraytoJSONArray(java.lang.String string) +
      Produce a JSONArray of JSONObjects from a comma delimited text string, + using the first row as a source of names.
      +
      static java.lang.StringtoString(JSONArray ja) +
      Produce a comma delimited text from a JSONArray of JSONObjects.
      +
      static java.lang.StringtoString(JSONArray names, + JSONArray ja) +
      Produce a comma delimited text from a JSONArray of JSONObjects using + a provided list of names.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        CDL

        +
        public CDL()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        rowToJSONArray

        +
        public static JSONArray rowToJSONArray(JSONTokener x)
        +                                throws JSONException
        +
        Produce a JSONArray of strings from a row of comma delimited values.
        +
        Parameters:
        x - A JSONTokener of the source text.
        +
        Returns:
        A JSONArray of strings.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        rowToJSONObject

        +
        public static JSONObject rowToJSONObject(JSONArray names,
        +                         JSONTokener x)
        +                                  throws JSONException
        +
        Produce a JSONObject from a row of comma delimited text, using a + parallel JSONArray of strings to provides the names of the elements.
        +
        Parameters:
        names - A JSONArray of names. This is commonly obtained from the + first row of a comma delimited text file using the rowToJSONArray + method.
        x - A JSONTokener of the source text.
        +
        Returns:
        A JSONObject combining the names and values.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        rowToString

        +
        public static java.lang.String rowToString(JSONArray ja)
        +
        Produce a comma delimited text row from a JSONArray. Values containing + the comma character will be quoted. Troublesome characters may be + removed.
        +
        Parameters:
        ja - A JSONArray of strings.
        +
        Returns:
        A string ending in NEWLINE.
        +
      • +
      + + + +
        +
      • +

        toJSONArray

        +
        public static JSONArray toJSONArray(java.lang.String string)
        +                             throws JSONException
        +
        Produce a JSONArray of JSONObjects from a comma delimited text string, + using the first row as a source of names.
        +
        Parameters:
        string - The comma delimited text.
        +
        Returns:
        A JSONArray of JSONObjects.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toJSONArray

        +
        public static JSONArray toJSONArray(JSONTokener x)
        +                             throws JSONException
        +
        Produce a JSONArray of JSONObjects from a comma delimited text string, + using the first row as a source of names.
        +
        Parameters:
        x - The JSONTokener containing the comma delimited text.
        +
        Returns:
        A JSONArray of JSONObjects.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toJSONArray

        +
        public static JSONArray toJSONArray(JSONArray names,
        +                    java.lang.String string)
        +                             throws JSONException
        +
        Produce a JSONArray of JSONObjects from a comma delimited text string + using a supplied JSONArray as the source of element names.
        +
        Parameters:
        names - A JSONArray of strings.
        string - The comma delimited text.
        +
        Returns:
        A JSONArray of JSONObjects.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toJSONArray

        +
        public static JSONArray toJSONArray(JSONArray names,
        +                    JSONTokener x)
        +                             throws JSONException
        +
        Produce a JSONArray of JSONObjects from a comma delimited text string + using a supplied JSONArray as the source of element names.
        +
        Parameters:
        names - A JSONArray of strings.
        x - A JSONTokener of the source text.
        +
        Returns:
        A JSONArray of JSONObjects.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static java.lang.String toString(JSONArray ja)
        +                                 throws JSONException
        +
        Produce a comma delimited text from a JSONArray of JSONObjects. The + first row will be a list of names obtained by inspecting the first + JSONObject.
        +
        Parameters:
        ja - A JSONArray of JSONObjects.
        +
        Returns:
        A comma delimited text.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static java.lang.String toString(JSONArray names,
        +                        JSONArray ja)
        +                                 throws JSONException
        +
        Produce a comma delimited text from a JSONArray of JSONObjects using + a provided list of names. The list of names is not included in the + output.
        +
        Parameters:
        names - A JSONArray of strings.
        ja - A JSONArray of JSONObjects.
        +
        Returns:
        A comma delimited text.
        +
        Throws:
        +
        JSONException
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.4/reference/org/json/Cookie.html b/distribution/json4processing-0.1.4/reference/org/json/Cookie.html new file mode 100644 index 000000000..d9cea7c96 --- /dev/null +++ b/distribution/json4processing-0.1.4/reference/org/json/Cookie.html @@ -0,0 +1,347 @@ + + + + + +Cookie (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class Cookie

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.json.Cookie
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class Cookie
    +extends java.lang.Object
    +
    Convert a web browser cookie specification to a JSONObject and back. + JSON and Cookies are both notations for name/value pairs.
    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      Cookie() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      static java.lang.Stringescape(java.lang.String string) +
      Produce a copy of a string in which the characters '+', '%', '=', ';' + and control characters are replaced with "%hh".
      +
      static JSONObjecttoJSONObject(java.lang.String string) +
      Convert a cookie specification string into a JSONObject.
      +
      static java.lang.StringtoString(JSONObject jo) +
      Convert a JSONObject into a cookie specification string.
      +
      static java.lang.Stringunescape(java.lang.String string) +
      Convert %hh sequences to single characters, and + convert plus to space.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Cookie

        +
        public Cookie()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        escape

        +
        public static java.lang.String escape(java.lang.String string)
        +
        Produce a copy of a string in which the characters '+', '%', '=', ';' + and control characters are replaced with "%hh". This is a gentle form + of URL encoding, attempting to cause as little distortion to the + string as possible. The characters '=' and ';' are meta characters in + cookies. By convention, they are escaped using the URL-encoding. This is + only a convention, not a standard. Often, cookies are expected to have + encoded values. We encode '=' and ';' because we must. We encode '%' and + '+' because they are meta characters in URL encoding.
        +
        Parameters:
        string - The source string.
        +
        Returns:
        The escaped result.
        +
      • +
      + + + +
        +
      • +

        toJSONObject

        +
        public static JSONObject toJSONObject(java.lang.String string)
        +                               throws JSONException
        +
        Convert a cookie specification string into a JSONObject. The string + will contain a name value pair separated by '='. The name and the value + will be unescaped, possibly converting '+' and '%' sequences. The + cookie properties may follow, separated by ';', also represented as + name=value (except the secure property, which does not have a value). + The name will be stored under the key "name", and the value will be + stored under the key "value". This method does not do checking or + validation of the parameters. It only converts the cookie string into + a JSONObject.
        +
        Parameters:
        string - The cookie specification string.
        +
        Returns:
        A JSONObject containing "name", "value", and possibly other + members.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static java.lang.String toString(JSONObject jo)
        +                                 throws JSONException
        +
        Convert a JSONObject into a cookie specification string. The JSONObject + must contain "name" and "value" members. + If the JSONObject contains "expires", "domain", "path", or "secure" + members, they will be appended to the cookie specification string. + All other members are ignored.
        +
        Parameters:
        jo - A JSONObject
        +
        Returns:
        A cookie specification string
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        unescape

        +
        public static java.lang.String unescape(java.lang.String string)
        +
        Convert %hh sequences to single characters, and + convert plus to space.
        +
        Parameters:
        string - A string that may contain + + (plus) and + %hh sequences.
        +
        Returns:
        The unescaped string.
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.4/reference/org/json/CookieList.html b/distribution/json4processing-0.1.4/reference/org/json/CookieList.html new file mode 100644 index 000000000..17a590f3d --- /dev/null +++ b/distribution/json4processing-0.1.4/reference/org/json/CookieList.html @@ -0,0 +1,295 @@ + + + + + +CookieList (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class CookieList

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.json.CookieList
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class CookieList
    +extends java.lang.Object
    +
    Convert a web browser cookie list string to a JSONObject and back.
    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      CookieList() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      static JSONObjecttoJSONObject(java.lang.String string) +
      Convert a cookie list into a JSONObject.
      +
      static java.lang.StringtoString(JSONObject jo) +
      Convert a JSONObject into a cookie list.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        CookieList

        +
        public CookieList()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        toJSONObject

        +
        public static JSONObject toJSONObject(java.lang.String string)
        +                               throws JSONException
        +
        Convert a cookie list into a JSONObject. A cookie list is a sequence + of name/value pairs. The names are separated from the values by '='. + The pairs are separated by ';'. The names and the values + will be unescaped, possibly converting '+' and '%' sequences. + + To add a cookie to a cooklist, + cookielistJSONObject.put(cookieJSONObject.getString("name"), + cookieJSONObject.getString("value"));
        +
        Parameters:
        string - A cookie list string
        +
        Returns:
        A JSONObject
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static java.lang.String toString(JSONObject jo)
        +                                 throws JSONException
        +
        Convert a JSONObject into a cookie list. A cookie list is a sequence + of name/value pairs. The names are separated from the values by '='. + The pairs are separated by ';'. The characters '%', '+', '=', and ';' + in the names and values are replaced by "%hh".
        +
        Parameters:
        jo - A JSONObject
        +
        Returns:
        A cookie list string
        +
        Throws:
        +
        JSONException
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.4/reference/org/json/HTTP.html b/distribution/json4processing-0.1.4/reference/org/json/HTTP.html new file mode 100644 index 000000000..6de4ef3b7 --- /dev/null +++ b/distribution/json4processing-0.1.4/reference/org/json/HTTP.html @@ -0,0 +1,363 @@ + + + + + +HTTP (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class HTTP

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.json.HTTP
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class HTTP
    +extends java.lang.Object
    +
    Convert an HTTP header to a JSONObject and back.
    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Summary

      + + + + + + + + + + +
      Fields 
      Modifier and TypeField and Description
      static java.lang.StringCRLF +
      Carriage return/line feed.
      +
      +
    • +
    + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      HTTP() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      static JSONObjecttoJSONObject(java.lang.String string) +
      Convert an HTTP header string into a JSONObject.
      +
      static java.lang.StringtoString(JSONObject jo) +
      Convert a JSONObject into an HTTP header.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        CRLF

        +
        public static final java.lang.String CRLF
        +
        Carriage return/line feed.
        +
        See Also:
        Constant Field Values
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        HTTP

        +
        public HTTP()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        toJSONObject

        +
        public static JSONObject toJSONObject(java.lang.String string)
        +
        Convert an HTTP header string into a JSONObject. It can be a request + header or a response header. A request header will contain +
        {
        +    Method: "POST" (for example),
        +    "Request-URI": "/" (for example),
        +    "HTTP-Version": "HTTP/1.1" (for example)
        + }
        + A response header will contain +
        {
        +    "HTTP-Version": "HTTP/1.1" (for example),
        +    "Status-Code": "200" (for example),
        +    "Reason-Phrase": "OK" (for example)
        + }
        + In addition, the other parameters in the header will be captured, using + the HTTP field names as JSON names, so that
        +    Date: Sun, 26 May 2002 18:06:04 GMT
        +    Cookie: Q=q2=PPEAsg--; B=677gi6ouf29bn&b=2&f=s
        +    Cache-Control: no-cache
        + become +
        {...
        +    Date: "Sun, 26 May 2002 18:06:04 GMT",
        +    Cookie: "Q=q2=PPEAsg--; B=677gi6ouf29bn&b=2&f=s",
        +    "Cache-Control": "no-cache",
        + ...}
        + It does no further checking or conversion. It does not parse dates. + It does not do '%' transforms on URLs.
        +
        Parameters:
        string - An HTTP header string.
        +
        Returns:
        A JSONObject containing the elements and attributes + of the XML string.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static java.lang.String toString(JSONObject jo)
        +
        Convert a JSONObject into an HTTP header. A request header must contain +
        {
        +    Method: "POST" (for example),
        +    "Request-URI": "/" (for example),
        +    "HTTP-Version": "HTTP/1.1" (for example)
        + }
        + A response header must contain +
        {
        +    "HTTP-Version": "HTTP/1.1" (for example),
        +    "Status-Code": "200" (for example),
        +    "Reason-Phrase": "OK" (for example)
        + }
        + Any other members of the JSONObject will be output as HTTP fields. + The result will end with two CRLF pairs.
        +
        Parameters:
        jo - A JSONObject
        +
        Returns:
        An HTTP header string.
        +
        Throws:
        +
        JSONException - if the object does not contain enough + information.
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.4/reference/org/json/HTTPTokener.html b/distribution/json4processing-0.1.4/reference/org/json/HTTPTokener.html new file mode 100644 index 000000000..19733a532 --- /dev/null +++ b/distribution/json4processing-0.1.4/reference/org/json/HTTPTokener.html @@ -0,0 +1,280 @@ + + + + + +HTTPTokener (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class HTTPTokener

+
+
+ +
+
    +
  • +
    +
    +
    public class HTTPTokener
    +extends JSONTokener
    +
    The HTTPTokener extends the JSONTokener to provide additional methods + for the parsing of HTTP headers.
    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        HTTPTokener

        +
        public HTTPTokener(java.lang.String string)
        +
        Construct an HTTPTokener from a string.
        +
        Parameters:
        string - A source string.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        nextToken

        +
        public java.lang.String nextToken()
        +                           throws JSONException
        +
        Get the next token or string. This is used in parsing HTTP headers.
        +
        Returns:
        A String.
        +
        Throws:
        +
        JSONException
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.4/reference/org/json/JSONArray.html b/distribution/json4processing-0.1.4/reference/org/json/JSONArray.html new file mode 100644 index 000000000..5c1c26d04 --- /dev/null +++ b/distribution/json4processing-0.1.4/reference/org/json/JSONArray.html @@ -0,0 +1,1285 @@ + + + + + +JSONArray (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class JSONArray

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.json.JSONArray
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class JSONArray
    +extends java.lang.Object
    +
    A JSONArray is an ordered sequence of values. Its external text form is a + string wrapped in square brackets with commas separating the values. The + internal form is an object having get and opt + methods for accessing the values by index, and put methods for + adding or replacing values. The values can be any of these types: + Boolean, JSONArray, JSONObject, + Number, String, or the + JSONObject.NULL object. +

    + The constructor can convert a JSON text into a Java object. The + toString method converts to JSON text. +

    + A get method returns a value if one can be found, and throws an + exception if one cannot be found. An opt method returns a + default value instead of throwing an exception, and so is useful for + obtaining optional values. +

    + The generic get() and opt() methods return an + object which you can cast or query for type. There are also typed + get and opt methods that do type checking and type + coercion for you. +

    + The texts produced by the toString methods strictly conform to + JSON syntax rules. The constructors are more forgiving in the texts they will + accept: +

      +
    • An extra , (comma) may appear just + before the closing bracket.
    • +
    • The null value will be inserted when there + is , (comma) elision.
    • +
    • Strings may be quoted with ' (single + quote).
    • +
    • Strings do not need to be quoted at all if they do not begin with a quote + or single quote, and if they do not contain leading or trailing spaces, + and if they do not contain any of these characters: + { } [ ] / \ : , = ; # and if they do not look like numbers + and if they are not the reserved words true, + false, or null.
    • +
    • Values can be separated by ; (semicolon) as + well as by , (comma).
    • +
    • Numbers may have the + 0x- (hex) prefix.
    • +
    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + + + + + + + + + +
      Constructors 
      Constructor and Description
      JSONArray() +
      Construct an empty JSONArray.
      +
      JSONArray(java.util.Collection collection) +
      Construct a JSONArray from a Collection.
      +
      JSONArray(JSONTokener x) +
      Construct a JSONArray from a JSONTokener.
      +
      JSONArray(java.lang.Object array) +
      Construct a JSONArray from an array
      +
      JSONArray(java.lang.String source) +
      Construct a JSONArray from a source JSON text.
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      java.lang.Objectget(int index) +
      Get the object value associated with an index.
      +
      booleangetBoolean(int index) +
      Get the boolean value associated with an index.
      +
      doublegetDouble(int index) +
      Get the double value associated with an index.
      +
      intgetInt(int index) +
      Get the int value associated with an index.
      +
      JSONArraygetJSONArray(int index) +
      Get the JSONArray associated with an index.
      +
      JSONObjectgetJSONObject(int index) +
      Get the JSONObject associated with an index.
      +
      longgetLong(int index) +
      Get the long value associated with an index.
      +
      java.lang.StringgetString(int index) +
      Get the string associated with an index.
      +
      booleanisNull(int index) +
      Determine if the value is null.
      +
      java.lang.Stringjoin(java.lang.String separator) +
      Make a string from the contents of this JSONArray.
      +
      intlength() +
      Get the number of elements in the JSONArray, included nulls.
      +
      java.lang.Objectopt(int index) +
      Get the optional object value associated with an index.
      +
      booleanoptBoolean(int index) +
      Get the optional boolean value associated with an index.
      +
      booleanoptBoolean(int index, + boolean defaultValue) +
      Get the optional boolean value associated with an index.
      +
      doubleoptDouble(int index) +
      Get the optional double value associated with an index.
      +
      doubleoptDouble(int index, + double defaultValue) +
      Get the optional double value associated with an index.
      +
      intoptInt(int index) +
      Get the optional int value associated with an index.
      +
      intoptInt(int index, + int defaultValue) +
      Get the optional int value associated with an index.
      +
      JSONArrayoptJSONArray(int index) +
      Get the optional JSONArray associated with an index.
      +
      JSONObjectoptJSONObject(int index) +
      Get the optional JSONObject associated with an index.
      +
      longoptLong(int index) +
      Get the optional long value associated with an index.
      +
      longoptLong(int index, + long defaultValue) +
      Get the optional long value associated with an index.
      +
      java.lang.StringoptString(int index) +
      Get the optional string value associated with an index.
      +
      java.lang.StringoptString(int index, + java.lang.String defaultValue) +
      Get the optional string associated with an index.
      +
      JSONArrayput(boolean value) +
      Append a boolean value.
      +
      JSONArrayput(java.util.Collection value) +
      Put a value in the JSONArray, where the value will be a + JSONArray which is produced from a Collection.
      +
      JSONArrayput(double value) +
      Append a double value.
      +
      JSONArrayput(int value) +
      Append an int value.
      +
      JSONArrayput(int index, + boolean value) +
      Put or replace a boolean value in the JSONArray.
      +
      JSONArrayput(int index, + java.util.Collection value) +
      Put a value in the JSONArray, where the value will be a + JSONArray which is produced from a Collection.
      +
      JSONArrayput(int index, + double value) +
      Put or replace a double value.
      +
      JSONArrayput(int index, + int value) +
      Put or replace an int value.
      +
      JSONArrayput(int index, + long value) +
      Put or replace a long value.
      +
      JSONArrayput(int index, + java.util.Map value) +
      Put a value in the JSONArray, where the value will be a + JSONObject that is produced from a Map.
      +
      JSONArrayput(int index, + java.lang.Object value) +
      Put or replace an object value in the JSONArray.
      +
      JSONArrayput(long value) +
      Append an long value.
      +
      JSONArrayput(java.util.Map value) +
      Put a value in the JSONArray, where the value will be a + JSONObject which is produced from a Map.
      +
      JSONArrayput(java.lang.Object value) +
      Append an object value.
      +
      java.lang.Objectremove(int index) +
      Remove an index and close the hole.
      +
      JSONObjecttoJSONObject(JSONArray names) +
      Produce a JSONObject by combining a JSONArray of names with the values + of this JSONArray.
      +
      java.lang.StringtoString() +
      Make a JSON text of this JSONArray.
      +
      java.lang.StringtoString(int indentFactor) +
      Make a prettyprinted JSON text of this JSONArray.
      +
      java.io.Writerwrite(java.io.Writer writer) +
      Write the contents of the JSONArray as JSON text to a writer.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        JSONArray

        +
        public JSONArray()
        +
        Construct an empty JSONArray.
        +
      • +
      + + + +
        +
      • +

        JSONArray

        +
        public JSONArray(JSONTokener x)
        +          throws JSONException
        +
        Construct a JSONArray from a JSONTokener.
        +
        Parameters:
        x - A JSONTokener
        +
        Throws:
        +
        JSONException - If there is a syntax error.
        +
      • +
      + + + +
        +
      • +

        JSONArray

        +
        public JSONArray(java.lang.String source)
        +          throws JSONException
        +
        Construct a JSONArray from a source JSON text.
        +
        Parameters:
        source - A string that begins with + [ (left bracket) + and ends with ] (right bracket).
        +
        Throws:
        +
        JSONException - If there is a syntax error.
        +
      • +
      + + + +
        +
      • +

        JSONArray

        +
        public JSONArray(java.util.Collection collection)
        +
        Construct a JSONArray from a Collection.
        +
        Parameters:
        collection - A Collection.
        +
      • +
      + + + +
        +
      • +

        JSONArray

        +
        public JSONArray(java.lang.Object array)
        +
        Construct a JSONArray from an array
        +
        Throws:
        +
        JSONException - If not an array.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        get

        +
        public java.lang.Object get(int index)
        +                     throws JSONException
        +
        Get the object value associated with an index.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        An object value.
        +
        Throws:
        +
        JSONException - If there is no value for the index.
        +
      • +
      + + + +
        +
      • +

        getBoolean

        +
        public boolean getBoolean(int index)
        +                   throws JSONException
        +
        Get the boolean value associated with an index. + The string values "true" and "false" are converted to boolean.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        The truth.
        +
        Throws:
        +
        JSONException - If there is no value for the index or if the + value is not convertible to boolean.
        +
      • +
      + + + +
        +
      • +

        getDouble

        +
        public double getDouble(int index)
        +                 throws JSONException
        +
        Get the double value associated with an index.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        The value.
        +
        Throws:
        +
        JSONException - If the key is not found or if the value cannot + be converted to a number.
        +
      • +
      + + + +
        +
      • +

        getInt

        +
        public int getInt(int index)
        +           throws JSONException
        +
        Get the int value associated with an index.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        The value.
        +
        Throws:
        +
        JSONException - If the key is not found or if the value is not a number.
        +
      • +
      + + + +
        +
      • +

        getJSONArray

        +
        public JSONArray getJSONArray(int index)
        +                       throws JSONException
        +
        Get the JSONArray associated with an index.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        A JSONArray value.
        +
        Throws:
        +
        JSONException - If there is no value for the index. or if the + value is not a JSONArray
        +
      • +
      + + + +
        +
      • +

        getJSONObject

        +
        public JSONObject getJSONObject(int index)
        +
        Get the JSONObject associated with an index.
        +
        Parameters:
        index - subscript
        +
        Returns:
        A JSONObject value.
        +
        Throws:
        +
        JSONException - If there is no value for the index or if the + value is not a JSONObject
        +
      • +
      + + + +
        +
      • +

        getLong

        +
        public long getLong(int index)
        +             throws JSONException
        +
        Get the long value associated with an index.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        The value.
        +
        Throws:
        +
        JSONException - If the key is not found or if the value cannot + be converted to a number.
        +
      • +
      + + + +
        +
      • +

        getString

        +
        public java.lang.String getString(int index)
        +                           throws JSONException
        +
        Get the string associated with an index.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        A string value.
        +
        Throws:
        +
        JSONException - If there is no string value for the index.
        +
      • +
      + + + +
        +
      • +

        isNull

        +
        public boolean isNull(int index)
        +
        Determine if the value is null.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        true if the value at the index is null, or if there is no value.
        +
      • +
      + + + +
        +
      • +

        join

        +
        public java.lang.String join(java.lang.String separator)
        +                      throws JSONException
        +
        Make a string from the contents of this JSONArray. The + separator string is inserted between each element. + Warning: This method assumes that the data structure is acyclical.
        +
        Parameters:
        separator - A string that will be inserted between the elements.
        +
        Returns:
        a string.
        +
        Throws:
        +
        JSONException - If the array contains an invalid number.
        +
      • +
      + + + +
        +
      • +

        length

        +
        public int length()
        +
        Get the number of elements in the JSONArray, included nulls.
        +
        Returns:
        The length (or size).
        +
      • +
      + + + +
        +
      • +

        opt

        +
        public java.lang.Object opt(int index)
        +
        Get the optional object value associated with an index.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        An object value, or null if there is no + object at that index.
        +
      • +
      + + + +
        +
      • +

        optBoolean

        +
        public boolean optBoolean(int index)
        +
        Get the optional boolean value associated with an index. + It returns false if there is no value at that index, + or if the value is not Boolean.TRUE or the String "true".
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        The truth.
        +
      • +
      + + + +
        +
      • +

        optBoolean

        +
        public boolean optBoolean(int index,
        +                 boolean defaultValue)
        +
        Get the optional boolean value associated with an index. + It returns the defaultValue if there is no value at that index or if + it is not a Boolean or the String "true" or "false" (case insensitive).
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        defaultValue - A boolean default.
        +
        Returns:
        The truth.
        +
      • +
      + + + +
        +
      • +

        optDouble

        +
        public double optDouble(int index)
        +
        Get the optional double value associated with an index. + NaN is returned if there is no value for the index, + or if the value is not a number and cannot be converted to a number.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        The value.
        +
      • +
      + + + +
        +
      • +

        optDouble

        +
        public double optDouble(int index,
        +               double defaultValue)
        +
        Get the optional double value associated with an index. + The defaultValue is returned if there is no value for the index, + or if the value is not a number and cannot be converted to a number.
        +
        Parameters:
        index - subscript
        defaultValue - The default value.
        +
        Returns:
        The value.
        +
      • +
      + + + +
        +
      • +

        optInt

        +
        public int optInt(int index)
        +
        Get the optional int value associated with an index. + Zero is returned if there is no value for the index, + or if the value is not a number and cannot be converted to a number.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        The value.
        +
      • +
      + + + +
        +
      • +

        optInt

        +
        public int optInt(int index,
        +         int defaultValue)
        +
        Get the optional int value associated with an index. + The defaultValue is returned if there is no value for the index, + or if the value is not a number and cannot be converted to a number.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        defaultValue - The default value.
        +
        Returns:
        The value.
        +
      • +
      + + + +
        +
      • +

        optJSONArray

        +
        public JSONArray optJSONArray(int index)
        +
        Get the optional JSONArray associated with an index.
        +
        Parameters:
        index - subscript
        +
        Returns:
        A JSONArray value, or null if the index has no value, + or if the value is not a JSONArray.
        +
      • +
      + + + +
        +
      • +

        optJSONObject

        +
        public JSONObject optJSONObject(int index)
        +
        Get the optional JSONObject associated with an index. + Null is returned if the key is not found, or null if the index has + no value, or if the value is not a JSONObject.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        A JSONObject value.
        +
      • +
      + + + +
        +
      • +

        optLong

        +
        public long optLong(int index)
        +
        Get the optional long value associated with an index. + Zero is returned if there is no value for the index, + or if the value is not a number and cannot be converted to a number.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        The value.
        +
      • +
      + + + +
        +
      • +

        optLong

        +
        public long optLong(int index,
        +           long defaultValue)
        +
        Get the optional long value associated with an index. + The defaultValue is returned if there is no value for the index, + or if the value is not a number and cannot be converted to a number.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        defaultValue - The default value.
        +
        Returns:
        The value.
        +
      • +
      + + + +
        +
      • +

        optString

        +
        public java.lang.String optString(int index)
        +
        Get the optional string value associated with an index. It returns an + empty string if there is no value at that index. If the value + is not a string and is not null, then it is coverted to a string.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        A String value.
        +
      • +
      + + + +
        +
      • +

        optString

        +
        public java.lang.String optString(int index,
        +                         java.lang.String defaultValue)
        +
        Get the optional string associated with an index. + The defaultValue is returned if the key is not found.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        defaultValue - The default value.
        +
        Returns:
        A String value.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArray put(boolean value)
        +
        Append a boolean value. This increases the array's length by one.
        +
        Parameters:
        value - A boolean value.
        +
        Returns:
        this.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArray put(java.util.Collection value)
        +
        Put a value in the JSONArray, where the value will be a + JSONArray which is produced from a Collection.
        +
        Parameters:
        value - A Collection value.
        +
        Returns:
        this.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArray put(double value)
        +
        Append a double value. This increases the array's length by one.
        +
        Parameters:
        value - A double value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - if the value is not finite.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArray put(int value)
        +
        Append an int value. This increases the array's length by one.
        +
        Parameters:
        value - An int value.
        +
        Returns:
        this.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArray put(long value)
        +
        Append an long value. This increases the array's length by one.
        +
        Parameters:
        value - A long value.
        +
        Returns:
        this.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArray put(java.util.Map value)
        +
        Put a value in the JSONArray, where the value will be a + JSONObject which is produced from a Map.
        +
        Parameters:
        value - A Map value.
        +
        Returns:
        this.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArray put(java.lang.Object value)
        +
        Append an object value. This increases the array's length by one.
        +
        Parameters:
        value - An object value. The value should be a + Boolean, Double, Integer, JSONArray, JSONObject, Long, or String, or the + JSONObject.NULL object.
        +
        Returns:
        this.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArray put(int index,
        +            boolean value)
        +
        Put or replace a boolean value in the JSONArray. If the index is greater + than the length of the JSONArray, then null elements will be added as + necessary to pad it out.
        +
        Parameters:
        index - The subscript.
        value - A boolean value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the index is negative.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArray put(int index,
        +            java.util.Collection value)
        +
        Put a value in the JSONArray, where the value will be a + JSONArray which is produced from a Collection.
        +
        Parameters:
        index - The subscript.
        value - A Collection value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the index is negative or if the value is + not finite.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArray put(int index,
        +            double value)
        +
        Put or replace a double value. If the index is greater than the length of + the JSONArray, then null elements will be added as necessary to pad + it out.
        +
        Parameters:
        index - The subscript.
        value - A double value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the index is negative or if the value is + not finite.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArray put(int index,
        +            int value)
        +
        Put or replace an int value. If the index is greater than the length of + the JSONArray, then null elements will be added as necessary to pad + it out.
        +
        Parameters:
        index - The subscript.
        value - An int value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the index is negative.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArray put(int index,
        +            long value)
        +
        Put or replace a long value. If the index is greater than the length of + the JSONArray, then null elements will be added as necessary to pad + it out.
        +
        Parameters:
        index - The subscript.
        value - A long value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the index is negative.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArray put(int index,
        +            java.util.Map value)
        +
        Put a value in the JSONArray, where the value will be a + JSONObject that is produced from a Map.
        +
        Parameters:
        index - The subscript.
        value - The Map value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the index is negative or if the the value is + an invalid number.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArray put(int index,
        +            java.lang.Object value)
        +
        Put or replace an object value in the JSONArray. If the index is greater + than the length of the JSONArray, then null elements will be added as + necessary to pad it out.
        +
        Parameters:
        index - The subscript.
        value - The value to put into the array. The value should be a + Boolean, Double, Integer, JSONArray, JSONObject, Long, or String, or the + JSONObject.NULL object.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the index is negative or if the the value is + an invalid number.
        +
      • +
      + + + +
        +
      • +

        remove

        +
        public java.lang.Object remove(int index)
        +
        Remove an index and close the hole.
        +
        Parameters:
        index - The index of the element to be removed.
        +
        Returns:
        The value that was associated with the index, + or null if there was no value.
        +
      • +
      + + + +
        +
      • +

        toJSONObject

        +
        public JSONObject toJSONObject(JSONArray names)
        +                        throws JSONException
        +
        Produce a JSONObject by combining a JSONArray of names with the values + of this JSONArray.
        +
        Parameters:
        names - A JSONArray containing a list of key strings. These will be + paired with the values.
        +
        Returns:
        A JSONObject, or null if there are no names or if this JSONArray + has no values.
        +
        Throws:
        +
        JSONException - If any of the names are null.
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public java.lang.String toString()
        +
        Make a JSON text of this JSONArray. For compactness, no + unnecessary whitespace is added. If it is not possible to produce a + syntactically correct JSON text then null will be returned instead. This + could occur if the array contains an invalid number. +

        + Warning: This method assumes that the data structure is acyclical.

        +
        +
        Overrides:
        +
        toString in class java.lang.Object
        +
        Returns:
        a printable, displayable, transmittable + representation of the array.
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public java.lang.String toString(int indentFactor)
        +                          throws JSONException
        +
        Make a prettyprinted JSON text of this JSONArray. + Warning: This method assumes that the data structure is acyclical.
        +
        Parameters:
        indentFactor - The number of spaces to add to each level of + indentation.
        +
        Returns:
        a printable, displayable, transmittable + representation of the object, beginning + with [ (left bracket) and ending + with ] (right bracket).
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        write

        +
        public java.io.Writer write(java.io.Writer writer)
        +
        Write the contents of the JSONArray as JSON text to a writer. + For compactness, no whitespace is added. +

        + Warning: This method assumes that the data structure is acyclical.

        +
        Returns:
        The writer.
        +
        Throws:
        +
        JSONException
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.4/reference/org/json/JSONException.html b/distribution/json4processing-0.1.4/reference/org/json/JSONException.html new file mode 100644 index 000000000..fd5ffa9bc --- /dev/null +++ b/distribution/json4processing-0.1.4/reference/org/json/JSONException.html @@ -0,0 +1,298 @@ + + + + + +JSONException (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class JSONException

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • java.lang.Throwable
    • +
    • +
        +
      • java.lang.Exception
      • +
      • +
          +
        • org.json.JSONException
        • +
        +
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.io.Serializable
    +
    +
    +
    +
    public class JSONException
    +extends java.lang.Exception
    +
    The JSONException is thrown by the JSON.org classes when things are amiss.
    +
    Author:
    +
    JSON.org
    +
    See Also:
    Serialized Form
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + +
      Constructors 
      Constructor and Description
      JSONException(java.lang.String message) +
      Constructs a JSONException with an explanatory message.
      +
      JSONException(java.lang.Throwable cause) 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      java.lang.ThrowablegetCause() 
      +
        +
      • + + +

        Methods inherited from class java.lang.Throwable

        +addSuppressed, fillInStackTrace, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
      • +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        JSONException

        +
        public JSONException(java.lang.String message)
        +
        Constructs a JSONException with an explanatory message.
        +
        Parameters:
        message - Detail about the reason for the exception.
        +
      • +
      + + + +
        +
      • +

        JSONException

        +
        public JSONException(java.lang.Throwable cause)
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getCause

        +
        public java.lang.Throwable getCause()
        +
        +
        Overrides:
        +
        getCause in class java.lang.Throwable
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.4/reference/org/json/JSONML.html b/distribution/json4processing-0.1.4/reference/org/json/JSONML.html new file mode 100644 index 000000000..6c60c881b --- /dev/null +++ b/distribution/json4processing-0.1.4/reference/org/json/JSONML.html @@ -0,0 +1,404 @@ + + + + + +JSONML (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class JSONML

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.json.JSONML
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class JSONML
    +extends java.lang.Object
    +
    This provides static methods to convert an XML text into a JSONArray or + JSONObject, and to covert a JSONArray or JSONObject into an XML text using + the JsonML transform.
    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      JSONML() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      static JSONArraytoJSONArray(java.lang.String string) +
      Convert a well-formed (but not necessarily valid) XML string into a + JSONArray using the JsonML transform.
      +
      static JSONArraytoJSONArray(XMLTokener x) +
      Convert a well-formed (but not necessarily valid) XML string into a + JSONArray using the JsonML transform.
      +
      static JSONObjecttoJSONObject(java.lang.String string) +
      Convert a well-formed (but not necessarily valid) XML string into a + JSONObject using the JsonML transform.
      +
      static JSONObjecttoJSONObject(XMLTokener x) +
      Convert a well-formed (but not necessarily valid) XML string into a + JSONObject using the JsonML transform.
      +
      static java.lang.StringtoString(JSONArray ja) +
      Reverse the JSONML transformation, making an XML text from a JSONArray.
      +
      static java.lang.StringtoString(JSONObject jo) +
      Reverse the JSONML transformation, making an XML text from a JSONObject.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        JSONML

        +
        public JSONML()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        toJSONArray

        +
        public static JSONArray toJSONArray(java.lang.String string)
        +                             throws JSONException
        +
        Convert a well-formed (but not necessarily valid) XML string into a + JSONArray using the JsonML transform. Each XML tag is represented as + a JSONArray in which the first element is the tag name. If the tag has + attributes, then the second element will be JSONObject containing the + name/value pairs. If the tag contains children, then strings and + JSONArrays will represent the child tags. + Comments, prologs, DTDs, and <[ [ ]]> are ignored.
        +
        Parameters:
        string - The source string.
        +
        Returns:
        A JSONArray containing the structured data from the XML string.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toJSONArray

        +
        public static JSONArray toJSONArray(XMLTokener x)
        +                             throws JSONException
        +
        Convert a well-formed (but not necessarily valid) XML string into a + JSONArray using the JsonML transform. Each XML tag is represented as + a JSONArray in which the first element is the tag name. If the tag has + attributes, then the second element will be JSONObject containing the + name/value pairs. If the tag contains children, then strings and + JSONArrays will represent the child content and tags. + Comments, prologs, DTDs, and <[ [ ]]> are ignored.
        +
        Parameters:
        x - An XMLTokener.
        +
        Returns:
        A JSONArray containing the structured data from the XML string.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toJSONObject

        +
        public static JSONObject toJSONObject(XMLTokener x)
        +                               throws JSONException
        +
        Convert a well-formed (but not necessarily valid) XML string into a + JSONObject using the JsonML transform. Each XML tag is represented as + a JSONObject with a "tagName" property. If the tag has attributes, then + the attributes will be in the JSONObject as properties. If the tag + contains children, the object will have a "childNodes" property which + will be an array of strings and JsonML JSONObjects. + + Comments, prologs, DTDs, and <[ [ ]]> are ignored.
        +
        Parameters:
        x - An XMLTokener of the XML source text.
        +
        Returns:
        A JSONObject containing the structured data from the XML string.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toJSONObject

        +
        public static JSONObject toJSONObject(java.lang.String string)
        +                               throws JSONException
        +
        Convert a well-formed (but not necessarily valid) XML string into a + JSONObject using the JsonML transform. Each XML tag is represented as + a JSONObject with a "tagName" property. If the tag has attributes, then + the attributes will be in the JSONObject as properties. If the tag + contains children, the object will have a "childNodes" property which + will be an array of strings and JsonML JSONObjects. + + Comments, prologs, DTDs, and <[ [ ]]> are ignored.
        +
        Parameters:
        string - The XML source text.
        +
        Returns:
        A JSONObject containing the structured data from the XML string.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static java.lang.String toString(JSONArray ja)
        +                                 throws JSONException
        +
        Reverse the JSONML transformation, making an XML text from a JSONArray.
        +
        Parameters:
        ja - A JSONArray.
        +
        Returns:
        An XML string.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static java.lang.String toString(JSONObject jo)
        +                                 throws JSONException
        +
        Reverse the JSONML transformation, making an XML text from a JSONObject. + The JSONObject must contain a "tagName" property. If it has children, + then it must have a "childNodes" property containing an array of objects. + The other properties are attributes with string values.
        +
        Parameters:
        jo - A JSONObject.
        +
        Returns:
        An XML string.
        +
        Throws:
        +
        JSONException
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.4/reference/org/json/JSONObject.html b/distribution/json4processing-0.1.4/reference/org/json/JSONObject.html new file mode 100644 index 000000000..00daaaff6 --- /dev/null +++ b/distribution/json4processing-0.1.4/reference/org/json/JSONObject.html @@ -0,0 +1,1626 @@ + + + + + +JSONObject (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class JSONObject

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.json.JSONObject
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class JSONObject
    +extends java.lang.Object
    +
    A JSONObject is an unordered collection of name/value pairs. Its external + form is a string wrapped in curly braces with colons between the names and + values, and commas between the values and names. The internal form is an + object having get and opt methods for accessing the + values by name, and put methods for adding or replacing values + by name. The values can be any of these types: Boolean, + JSONArray, JSONObject, Number, + String, or the JSONObject.NULL object. A JSONObject + constructor can be used to convert an external form JSON text into an + internal form whose values can be retrieved with the get and + opt methods, or to convert values into a JSON text using the + put and toString methods. A get method + returns a value if one can be found, and throws an exception if one cannot be + found. An opt method returns a default value instead of throwing + an exception, and so is useful for obtaining optional values. +

    + The generic get() and opt() methods return an + object, which you can cast or query for type. There are also typed + get and opt methods that do type checking and type + coercion for you. The opt methods differ from the get methods in that they do + not throw. Instead, they return a specified value, such as null. +

    + The put methods add or replace values in an object. For example, + +

    + myString = new JSONObject().put("JSON", "Hello, World!").toString();
    + 
    + + produces the string {"JSON": "Hello, World"}. +

    + The texts produced by the toString methods strictly conform to + the JSON syntax rules. The constructors are more forgiving in the texts they + will accept: +

      +
    • An extra , (comma) may appear just + before the closing brace.
    • +
    • Strings may be quoted with ' (single + quote).
    • +
    • Strings do not need to be quoted at all if they do not begin with a quote + or single quote, and if they do not contain leading or trailing spaces, and + if they do not contain any of these characters: + { } [ ] / \ : , = ; # and if they do not look like numbers and + if they are not the reserved words true, false, or + null.
    • +
    • Keys can be followed by = or => as well as by + :.
    • +
    • Values can be followed by ; (semicolon) as + well as by , (comma).
    • +
    • Numbers may have the 0x- (hex) prefix.
    • +
    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Summary

      + + + + + + + + + + +
      Fields 
      Modifier and TypeField and Description
      static java.lang.ObjectNULL +
      It is sometimes more convenient and less ambiguous to have a + NULL object than to use Java's null value.
      +
      +
    • +
    + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Constructors 
      Constructor and Description
      JSONObject() +
      Construct an empty JSONObject.
      +
      JSONObject(JSONObject jo, + java.lang.String[] names) +
      Construct a JSONObject from a subset of another JSONObject.
      +
      JSONObject(JSONTokener x) +
      Construct a JSONObject from a JSONTokener.
      +
      JSONObject(java.util.Map map) +
      Construct a JSONObject from a Map.
      +
      JSONObject(java.lang.Object bean) +
      Construct a JSONObject from an Object using bean getters.
      +
      JSONObject(java.lang.Object object, + java.lang.String[] names) +
      Construct a JSONObject from an Object, using reflection to find the + public members.
      +
      JSONObject(java.lang.String source) +
      Construct a JSONObject from a source JSON text string.
      +
      JSONObject(java.lang.String baseName, + java.util.Locale locale) +
      Construct a JSONObject from a ResourceBundle.
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      JSONObjectaccumulate(java.lang.String key, + java.lang.Object value) +
      Accumulate values under a key.
      +
      JSONObjectappend(java.lang.String key, + java.lang.Object value) +
      Append values to the array under a key.
      +
      static java.lang.StringdoubleToString(double d) +
      Produce a string from a double.
      +
      java.lang.Objectget(java.lang.String key) +
      Get the value object associated with a key.
      +
      booleangetBoolean(java.lang.String key) +
      Get the boolean value associated with a key.
      +
      doublegetDouble(java.lang.String key) +
      Get the double value associated with a key.
      +
      intgetInt(java.lang.String key) +
      Get the int value associated with a key.
      +
      JSONArraygetJSONArray(java.lang.String key) +
      Get the JSONArray value associated with a key.
      +
      JSONObjectgetJSONObject(java.lang.String key) +
      Get the JSONObject value associated with a key.
      +
      longgetLong(java.lang.String key) +
      Get the long value associated with a key.
      +
      static java.lang.String[]getNames(JSONObject jo) +
      Get an array of field names from a JSONObject.
      +
      static java.lang.String[]getNames(java.lang.Object object) +
      Get an array of field names from an Object.
      +
      java.lang.StringgetString(java.lang.String key) +
      Get the string associated with a key.
      +
      booleanhas(java.lang.String key) +
      Determine if the JSONObject contains a specific key.
      +
      JSONObjectincrement(java.lang.String key) +
      Increment a property of a JSONObject.
      +
      booleanisNull(java.lang.String key) +
      Determine if the value associated with the key is null or if there is no + value.
      +
      java.util.Iteratorkeys() +
      Get an enumeration of the keys of the JSONObject.
      +
      intlength() +
      Get the number of keys stored in the JSONObject.
      +
      JSONArraynames() +
      Produce a JSONArray containing the names of the elements of this + JSONObject.
      +
      static java.lang.StringnumberToString(java.lang.Number number) +
      Produce a string from a Number.
      +
      java.lang.Objectopt(java.lang.String key) +
      Get an optional value associated with a key.
      +
      booleanoptBoolean(java.lang.String key) +
      Get an optional boolean associated with a key.
      +
      booleanoptBoolean(java.lang.String key, + boolean defaultValue) +
      Get an optional boolean associated with a key.
      +
      doubleoptDouble(java.lang.String key) +
      Get an optional double associated with a key, or NaN if there is no such + key or if its value is not a number.
      +
      doubleoptDouble(java.lang.String key, + double defaultValue) +
      Get an optional double associated with a key, or the defaultValue if + there is no such key or if its value is not a number.
      +
      intoptInt(java.lang.String key) +
      Get an optional int value associated with a key, or zero if there is no + such key or if the value is not a number.
      +
      intoptInt(java.lang.String key, + int defaultValue) +
      Get an optional int value associated with a key, or the default if there + is no such key or if the value is not a number.
      +
      JSONArrayoptJSONArray(java.lang.String key) +
      Get an optional JSONArray associated with a key.
      +
      JSONObjectoptJSONObject(java.lang.String key) +
      Get an optional JSONObject associated with a key.
      +
      longoptLong(java.lang.String key) +
      Get an optional long value associated with a key, or zero if there is no + such key or if the value is not a number.
      +
      longoptLong(java.lang.String key, + long defaultValue) +
      Get an optional long value associated with a key, or the default if there + is no such key or if the value is not a number.
      +
      java.lang.StringoptString(java.lang.String key) +
      Get an optional string associated with a key.
      +
      java.lang.StringoptString(java.lang.String key, + java.lang.String defaultValue) +
      Get an optional string associated with a key.
      +
      JSONObjectput(java.lang.String key, + boolean value) +
      Put a key/boolean pair in the JSONObject.
      +
      JSONObjectput(java.lang.String key, + java.util.Collection value) +
      Put a key/value pair in the JSONObject, where the value will be a + JSONArray which is produced from a Collection.
      +
      JSONObjectput(java.lang.String key, + double value) +
      Put a key/double pair in the JSONObject.
      +
      JSONObjectput(java.lang.String key, + int value) +
      Put a key/int pair in the JSONObject.
      +
      JSONObjectput(java.lang.String key, + long value) +
      Put a key/long pair in the JSONObject.
      +
      JSONObjectput(java.lang.String key, + java.util.Map value) +
      Put a key/value pair in the JSONObject, where the value will be a + JSONObject which is produced from a Map.
      +
      JSONObjectput(java.lang.String key, + java.lang.Object value) +
      Put a key/value pair in the JSONObject.
      +
      JSONObjectputOnce(java.lang.String key, + java.lang.Object value) +
      Put a key/value pair in the JSONObject, but only if the key and the value + are both non-null, and only if there is not already a member with that + name.
      +
      JSONObjectputOpt(java.lang.String key, + java.lang.Object value) +
      Put a key/value pair in the JSONObject, but only if the key and the value + are both non-null.
      +
      static java.lang.Stringquote(java.lang.String string) +
      Produce a string in double quotes with backslash sequences in all the + right places.
      +
      java.lang.Objectremove(java.lang.String key) +
      Remove a name and its value, if present.
      +
      static java.lang.ObjectstringToValue(java.lang.String string) +
      Try to convert a string into a number, boolean, or null.
      +
      static voidtestValidity(java.lang.Object o) +
      Throw an exception if the object is a NaN or infinite number.
      +
      JSONArraytoJSONArray(JSONArray names) +
      Produce a JSONArray containing the values of the members of this + JSONObject.
      +
      java.lang.StringtoString() +
      Make a JSON text of this JSONObject.
      +
      java.lang.StringtoString(int indentFactor) +
      Make a prettyprinted JSON text of this JSONObject.
      +
      static java.lang.StringvalueToString(java.lang.Object value) +
      Make a JSON text of an Object value.
      +
      static java.lang.Objectwrap(java.lang.Object object) +
      Wrap an object, if necessary.
      +
      java.io.Writerwrite(java.io.Writer writer) +
      Write the contents of the JSONObject as JSON text to a writer.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        NULL

        +
        public static final java.lang.Object NULL
        +
        It is sometimes more convenient and less ambiguous to have a + NULL object than to use Java's null value. + JSONObject.NULL.equals(null) returns true. + JSONObject.NULL.toString() returns "null".
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        JSONObject

        +
        public JSONObject()
        +
        Construct an empty JSONObject.
        +
      • +
      + + + +
        +
      • +

        JSONObject

        +
        public JSONObject(JSONObject jo,
        +          java.lang.String[] names)
        +
        Construct a JSONObject from a subset of another JSONObject. An array of + strings is used to identify the keys that should be copied. Missing keys + are ignored.
        +
        Parameters:
        jo - A JSONObject.
        names - An array of strings.
        +
        Throws:
        +
        JSONException
        +
        JSONException - If a value is a non-finite number or if a name is + duplicated.
        +
      • +
      + + + +
        +
      • +

        JSONObject

        +
        public JSONObject(JSONTokener x)
        +
        Construct a JSONObject from a JSONTokener.
        +
        Parameters:
        x - A JSONTokener object containing the source string.
        +
        Throws:
        +
        JSONException - If there is a syntax error in the source string or a + duplicated key.
        +
      • +
      + + + +
        +
      • +

        JSONObject

        +
        public JSONObject(java.util.Map map)
        +
        Construct a JSONObject from a Map.
        +
        Parameters:
        map - A map object that can be used to initialize the contents of + the JSONObject.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        JSONObject

        +
        public JSONObject(java.lang.Object bean)
        +
        Construct a JSONObject from an Object using bean getters. It reflects on + all of the public methods of the object. For each of the methods with no + parameters and a name starting with "get" or + "is" followed by an uppercase letter, the method is invoked, + and a key and the value returned from the getter method are put into the + new JSONObject. + + The key is formed by removing the "get" or "is" + prefix. If the second remaining character is not upper case, then the + first character is converted to lower case. + + For example, if an object has a method named "getName", and + if the result of calling object.getName() is + "Larry Fine", then the JSONObject will contain + "name": "Larry Fine".
        +
        Parameters:
        bean - An object that has getter methods that should be used to make + a JSONObject.
        +
      • +
      + + + +
        +
      • +

        JSONObject

        +
        public JSONObject(java.lang.Object object,
        +          java.lang.String[] names)
        +
        Construct a JSONObject from an Object, using reflection to find the + public members. The resulting JSONObject's keys will be the strings from + the names array, and the values will be the field values associated with + those keys in the object. If a key is not found or not visible, then it + will not be copied into the new JSONObject.
        +
        Parameters:
        object - An object that has fields that should be used to make a + JSONObject.
        names - An array of strings, the names of the fields to be obtained + from the object.
        +
      • +
      + + + +
        +
      • +

        JSONObject

        +
        public JSONObject(java.lang.String source)
        +
        Construct a JSONObject from a source JSON text string. This is the most + commonly used JSONObject constructor.
        +
        Parameters:
        source - A string beginning with { (left + brace) and ending with } +  (right brace).
        +
        Throws:
        +
        JSONException - If there is a syntax error in the source string or a + duplicated key.
        +
      • +
      + + + +
        +
      • +

        JSONObject

        +
        public JSONObject(java.lang.String baseName,
        +          java.util.Locale locale)
        +
        Construct a JSONObject from a ResourceBundle.
        +
        Parameters:
        baseName - The ResourceBundle base name.
        locale - The Locale to load the ResourceBundle for.
        +
        Throws:
        +
        JSONException - If any JSONExceptions are detected.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        accumulate

        +
        public JSONObject accumulate(java.lang.String key,
        +                    java.lang.Object value)
        +
        Accumulate values under a key. It is similar to the put method except + that if there is already an object stored under the key then a JSONArray + is stored under the key to hold all of the accumulated values. If there + is already a JSONArray, then the new value is appended to it. In + contrast, the put method replaces the previous value. + + If only one value is accumulated that is not a JSONArray, then the result + will be the same as using put. But if multiple values are accumulated, + then the result will be like append.
        +
        Parameters:
        key - A key string.
        value - An object to be accumulated under the key.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the value is an invalid number or if the key is null.
        +
      • +
      + + + +
        +
      • +

        append

        +
        public JSONObject append(java.lang.String key,
        +                java.lang.Object value)
        +
        Append values to the array under a key. If the key does not exist in the + JSONObject, then the key is put in the JSONObject with its value being a + JSONArray containing the value parameter. If the key was already + associated with a JSONArray, then the value parameter is appended to it.
        +
        Parameters:
        key - A key string.
        value - An object to be accumulated under the key.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the key is null or if the current value associated with + the key is not a JSONArray.
        +
      • +
      + + + +
        +
      • +

        doubleToString

        +
        public static java.lang.String doubleToString(double d)
        +
        Produce a string from a double. The string "null" will be returned if the + number is not finite.
        +
        Parameters:
        d - A double.
        +
        Returns:
        A String.
        +
      • +
      + + + +
        +
      • +

        get

        +
        public java.lang.Object get(java.lang.String key)
        +
        Get the value object associated with a key.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        The object associated with the key.
        +
        Throws:
        +
        JSONException - if the key is not found.
        +
      • +
      + + + +
        +
      • +

        getBoolean

        +
        public boolean getBoolean(java.lang.String key)
        +
        Get the boolean value associated with a key.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        The truth. (False if it failes to find the value)
        +
        Throws:
        +
        JSONException - if the value is not a Boolean or the String "true" or + "false".
        +
      • +
      + + + +
        +
      • +

        getDouble

        +
        public double getDouble(java.lang.String key)
        +
        Get the double value associated with a key.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        The numeric value. -1 if it failes to find the value
        +
        Throws:
        +
        JSONException - if the key is not found or if the value is not a Number + object and cannot be converted to a number.
        +
      • +
      + + + +
        +
      • +

        getInt

        +
        public int getInt(java.lang.String key)
        +
        Get the int value associated with a key.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        The integer value. (-1 if it failes to get the integer)
        +
        Throws:
        +
        JSONException - if the key is not found or if the value cannot be converted + to an integer.
        +
      • +
      + + + +
        +
      • +

        getJSONArray

        +
        public JSONArray getJSONArray(java.lang.String key)
        +
        Get the JSONArray value associated with a key.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        A JSONArray which is the value. (null if failes to find the array)
        +
        Throws:
        +
        JSONException - if the key is not found or if the value is not a JSONArray.
        +
      • +
      + + + +
        +
      • +

        getJSONObject

        +
        public JSONObject getJSONObject(java.lang.String key)
        +
        Get the JSONObject value associated with a key.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        A JSONObject which is the value.
        +
        Throws:
        +
        JSONException - if the key is not found or if the value is not a JSONObject.
        +
      • +
      + + + +
        +
      • +

        getLong

        +
        public long getLong(java.lang.String key)
        +
        Get the long value associated with a key.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        The long value. (-1 if it failes)
        +
        Throws:
        +
        JSONException - if the key is not found or if the value cannot be converted + to a long.
        +
      • +
      + + + +
        +
      • +

        getNames

        +
        public static java.lang.String[] getNames(JSONObject jo)
        +
        Get an array of field names from a JSONObject.
        +
        Returns:
        An array of field names, or null if there are no names.
        +
      • +
      + + + +
        +
      • +

        getNames

        +
        public static java.lang.String[] getNames(java.lang.Object object)
        +
        Get an array of field names from an Object.
        +
        Returns:
        An array of field names, or null if there are no names.
        +
      • +
      + + + +
        +
      • +

        getString

        +
        public java.lang.String getString(java.lang.String key)
        +
        Get the string associated with a key.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        A string which is the value. (empty string if it fails)
        +
        Throws:
        +
        JSONException - if there is no string value for the key.
        +
      • +
      + + + +
        +
      • +

        has

        +
        public boolean has(java.lang.String key)
        +
        Determine if the JSONObject contains a specific key.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        true if the key exists in the JSONObject.
        +
      • +
      + + + +
        +
      • +

        increment

        +
        public JSONObject increment(java.lang.String key)
        +
        Increment a property of a JSONObject. If there is no such property, + create one with a value of 1. If there is such a property, and if it is + an Integer, Long, Double, or Float, then add one to it.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If there is already a property with this name that is not an + Integer, Long, Double, or Float.
        +
      • +
      + + + +
        +
      • +

        isNull

        +
        public boolean isNull(java.lang.String key)
        +
        Determine if the value associated with the key is null or if there is no + value.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        true if there is no value associated with the key or if the value + is the JSONObject.NULL object.
        +
      • +
      + + + +
        +
      • +

        keys

        +
        public java.util.Iterator keys()
        +
        Get an enumeration of the keys of the JSONObject.
        +
        Returns:
        An iterator of the keys.
        +
      • +
      + + + +
        +
      • +

        length

        +
        public int length()
        +
        Get the number of keys stored in the JSONObject.
        +
        Returns:
        The number of keys in the JSONObject.
        +
      • +
      + + + +
        +
      • +

        names

        +
        public JSONArray names()
        +
        Produce a JSONArray containing the names of the elements of this + JSONObject.
        +
        Returns:
        A JSONArray containing the key strings, or null if the JSONObject + is empty.
        +
      • +
      + + + +
        +
      • +

        numberToString

        +
        public static java.lang.String numberToString(java.lang.Number number)
        +
        Produce a string from a Number.
        +
        Parameters:
        number - A Number
        +
        Returns:
        A String.
        +
        Throws:
        +
        JSONException - If n is a non-finite number.
        +
      • +
      + + + +
        +
      • +

        opt

        +
        public java.lang.Object opt(java.lang.String key)
        +
        Get an optional value associated with a key.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        An object which is the value, or null if there is no value.
        +
      • +
      + + + +
        +
      • +

        optBoolean

        +
        public boolean optBoolean(java.lang.String key)
        +
        Get an optional boolean associated with a key. It returns false if there + is no such key, or if the value is not Boolean.TRUE or the String "true".
        +
        Parameters:
        key - A key string.
        +
        Returns:
        The truth.
        +
      • +
      + + + +
        +
      • +

        optBoolean

        +
        public boolean optBoolean(java.lang.String key,
        +                 boolean defaultValue)
        +
        Get an optional boolean associated with a key. It returns the + defaultValue if there is no such key, or if it is not a Boolean or the + String "true" or "false" (case insensitive).
        +
        Parameters:
        key - A key string.
        defaultValue - The default.
        +
        Returns:
        The truth.
        +
      • +
      + + + +
        +
      • +

        optDouble

        +
        public double optDouble(java.lang.String key)
        +
        Get an optional double associated with a key, or NaN if there is no such + key or if its value is not a number. If the value is a string, an attempt + will be made to evaluate it as a number.
        +
        Parameters:
        key - A string which is the key.
        +
        Returns:
        An object which is the value.
        +
      • +
      + + + +
        +
      • +

        optDouble

        +
        public double optDouble(java.lang.String key,
        +               double defaultValue)
        +
        Get an optional double associated with a key, or the defaultValue if + there is no such key or if its value is not a number. If the value is a + string, an attempt will be made to evaluate it as a number.
        +
        Parameters:
        key - A key string.
        defaultValue - The default.
        +
        Returns:
        An object which is the value.
        +
      • +
      + + + +
        +
      • +

        optInt

        +
        public int optInt(java.lang.String key)
        +
        Get an optional int value associated with a key, or zero if there is no + such key or if the value is not a number. If the value is a string, an + attempt will be made to evaluate it as a number.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        An object which is the value.
        +
      • +
      + + + +
        +
      • +

        optInt

        +
        public int optInt(java.lang.String key,
        +         int defaultValue)
        +
        Get an optional int value associated with a key, or the default if there + is no such key or if the value is not a number. If the value is a string, + an attempt will be made to evaluate it as a number.
        +
        Parameters:
        key - A key string.
        defaultValue - The default.
        +
        Returns:
        An object which is the value.
        +
      • +
      + + + +
        +
      • +

        optJSONArray

        +
        public JSONArray optJSONArray(java.lang.String key)
        +
        Get an optional JSONArray associated with a key. It returns null if there + is no such key, or if its value is not a JSONArray.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        A JSONArray which is the value.
        +
      • +
      + + + +
        +
      • +

        optJSONObject

        +
        public JSONObject optJSONObject(java.lang.String key)
        +
        Get an optional JSONObject associated with a key. It returns null if + there is no such key, or if its value is not a JSONObject.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        A JSONObject which is the value.
        +
      • +
      + + + +
        +
      • +

        optLong

        +
        public long optLong(java.lang.String key)
        +
        Get an optional long value associated with a key, or zero if there is no + such key or if the value is not a number. If the value is a string, an + attempt will be made to evaluate it as a number.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        An object which is the value.
        +
      • +
      + + + +
        +
      • +

        optLong

        +
        public long optLong(java.lang.String key,
        +           long defaultValue)
        +
        Get an optional long value associated with a key, or the default if there + is no such key or if the value is not a number. If the value is a string, + an attempt will be made to evaluate it as a number.
        +
        Parameters:
        key - A key string.
        defaultValue - The default.
        +
        Returns:
        An object which is the value.
        +
      • +
      + + + +
        +
      • +

        optString

        +
        public java.lang.String optString(java.lang.String key)
        +
        Get an optional string associated with a key. It returns an empty string + if there is no such key. If the value is not a string and is not null, + then it is converted to a string.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        A string which is the value.
        +
      • +
      + + + +
        +
      • +

        optString

        +
        public java.lang.String optString(java.lang.String key,
        +                         java.lang.String defaultValue)
        +
        Get an optional string associated with a key. It returns the defaultValue + if there is no such key.
        +
        Parameters:
        key - A key string.
        defaultValue - The default.
        +
        Returns:
        A string which is the value.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONObject put(java.lang.String key,
        +             boolean value)
        +
        Put a key/boolean pair in the JSONObject.
        +
        Parameters:
        key - A key string.
        value - A boolean which is the value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the key is null.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONObject put(java.lang.String key,
        +             java.util.Collection value)
        +
        Put a key/value pair in the JSONObject, where the value will be a + JSONArray which is produced from a Collection.
        +
        Parameters:
        key - A key string.
        value - A Collection value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONObject put(java.lang.String key,
        +             double value)
        +
        Put a key/double pair in the JSONObject.
        +
        Parameters:
        key - A key string.
        value - A double which is the value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the key is null or if the number is invalid.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONObject put(java.lang.String key,
        +             int value)
        +
        Put a key/int pair in the JSONObject.
        +
        Parameters:
        key - A key string.
        value - An int which is the value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the key is null.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONObject put(java.lang.String key,
        +             long value)
        +
        Put a key/long pair in the JSONObject.
        +
        Parameters:
        key - A key string.
        value - A long which is the value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the key is null.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONObject put(java.lang.String key,
        +             java.util.Map value)
        +
        Put a key/value pair in the JSONObject, where the value will be a + JSONObject which is produced from a Map.
        +
        Parameters:
        key - A key string.
        value - A Map value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONObject put(java.lang.String key,
        +             java.lang.Object value)
        +
        Put a key/value pair in the JSONObject. If the value is null, then the + key will be removed from the JSONObject if it is present.
        +
        Parameters:
        key - A key string.
        value - An object which is the value. It should be of one of these + types: Boolean, Double, Integer, JSONArray, JSONObject, Long, + String, or the JSONObject.NULL object.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the value is non-finite number or if the key is null.
        +
      • +
      + + + +
        +
      • +

        putOnce

        +
        public JSONObject putOnce(java.lang.String key,
        +                 java.lang.Object value)
        +
        Put a key/value pair in the JSONObject, but only if the key and the value + are both non-null, and only if there is not already a member with that + name.
        +
        Parameters:
        key -
        value -
        +
        Returns:
        his.
        +
        Throws:
        +
        JSONException - if the key is a duplicate
        +
      • +
      + + + +
        +
      • +

        putOpt

        +
        public JSONObject putOpt(java.lang.String key,
        +                java.lang.Object value)
        +
        Put a key/value pair in the JSONObject, but only if the key and the value + are both non-null.
        +
        Parameters:
        key - A key string.
        value - An object which is the value. It should be of one of these + types: Boolean, Double, Integer, JSONArray, JSONObject, Long, + String, or the JSONObject.NULL object.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the value is a non-finite number.
        +
      • +
      + + + +
        +
      • +

        quote

        +
        public static java.lang.String quote(java.lang.String string)
        +
        Produce a string in double quotes with backslash sequences in all the + right places. A backslash will be inserted within +
        Parameters:
        string - A String
        +
        Returns:
        A String correctly formatted for insertion in a JSON text.
        +
      • +
      + + + +
        +
      • +

        remove

        +
        public java.lang.Object remove(java.lang.String key)
        +
        Remove a name and its value, if present.
        +
        Parameters:
        key - The name to be removed.
        +
        Returns:
        The value that was associated with the name, or null if there was + no value.
        +
      • +
      + + + +
        +
      • +

        stringToValue

        +
        public static java.lang.Object stringToValue(java.lang.String string)
        +
        Try to convert a string into a number, boolean, or null. If the string + can't be converted, return the string.
        +
        Parameters:
        string - A String.
        +
        Returns:
        A simple JSON value.
        +
      • +
      + + + +
        +
      • +

        testValidity

        +
        public static void testValidity(java.lang.Object o)
        +                         throws JSONException
        +
        Throw an exception if the object is a NaN or infinite number.
        +
        Parameters:
        o - The object to test.
        +
        Throws:
        +
        JSONException - If o is a non-finite number.
        +
      • +
      + + + +
        +
      • +

        toJSONArray

        +
        public JSONArray toJSONArray(JSONArray names)
        +                      throws JSONException
        +
        Produce a JSONArray containing the values of the members of this + JSONObject.
        +
        Parameters:
        names - A JSONArray containing a list of key strings. This determines + the sequence of the values in the result.
        +
        Returns:
        A JSONArray of values.
        +
        Throws:
        +
        JSONException - If any of the values are non-finite numbers.
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public java.lang.String toString()
        +
        Make a JSON text of this JSONObject. For compactness, no whitespace is + added. If this would not result in a syntactically correct JSON text, + then null will be returned instead. +

        + Warning: This method assumes that the data structure is acyclical.

        +
        +
        Overrides:
        +
        toString in class java.lang.Object
        +
        Returns:
        a printable, displayable, portable, transmittable representation + of the object, beginning with { (left + brace) and ending with } (right + brace).
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public java.lang.String toString(int indentFactor)
        +
        Make a prettyprinted JSON text of this JSONObject. +

        + Warning: This method assumes that the data structure is acyclical.

        +
        Parameters:
        indentFactor - The number of spaces to add to each level of indentation.
        +
        Returns:
        a printable, displayable, portable, transmittable representation + of the object, beginning with { (left + brace) and ending with } (right + brace).
        +
        Throws:
        +
        JSONException - If the object contains an invalid number.
        +
      • +
      + + + +
        +
      • +

        valueToString

        +
        public static java.lang.String valueToString(java.lang.Object value)
        +
        Make a JSON text of an Object value. If the object has an + value.toJSONString() method, then that method will be used to produce the + JSON text. The method is required to produce a strictly conforming text. + If the object does not contain a toJSONString method (which is the most + common case), then a text will be produced by other means. If the value + is an array or Collection, then a JSONArray will be made from it and its + toJSONString method will be called. If the value is a MAP, then a + JSONObject will be made from it and its toJSONString method will be + called. Otherwise, the value's toString method will be called, and the + result will be quoted. + +

        + Warning: This method assumes that the data structure is acyclical.

        +
        Parameters:
        value - The value to be serialized.
        +
        Returns:
        a printable, displayable, transmittable representation of the + object, beginning with { (left + brace) and ending with } (right + brace).
        +
        Throws:
        +
        JSONException - If the value is or contains an invalid number.
        +
      • +
      + + + +
        +
      • +

        wrap

        +
        public static java.lang.Object wrap(java.lang.Object object)
        +
        Wrap an object, if necessary. If the object is null, return the NULL + object. If it is an array or collection, wrap it in a JSONArray. If it is + a map, wrap it in a JSONObject. If it is a standard property (Double, + String, et al) then it is already wrapped. Otherwise, if it comes from + one of the java packages, turn it into a string. And if it doesn't, try + to wrap it in a JSONObject. If the wrapping fails, then null is returned.
        +
        Parameters:
        object - The object to wrap
        +
        Returns:
        The wrapped value
        +
      • +
      + + + +
        +
      • +

        write

        +
        public java.io.Writer write(java.io.Writer writer)
        +
        Write the contents of the JSONObject as JSON text to a writer. For + compactness, no whitespace is added. +

        + Warning: This method assumes that the data structure is acyclical.

        +
        Returns:
        The writer.
        +
        Throws:
        +
        JSONException
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.4/reference/org/json/JSONString.html b/distribution/json4processing-0.1.4/reference/org/json/JSONString.html new file mode 100644 index 000000000..743b59d11 --- /dev/null +++ b/distribution/json4processing-0.1.4/reference/org/json/JSONString.html @@ -0,0 +1,215 @@ + + + + + +JSONString (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Interface JSONString

+
+
+
+
    +
  • +
    +
    +
    public interface JSONString
    +
    The JSONString interface allows a toJSONString() + method so that a class can change the behavior of + JSONObject.toString(), JSONArray.toString(), + and JSONWriter.value(Object). The + toJSONString method will be used instead of the default behavior + of using the Object's toString() method and quoting the result.
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      java.lang.StringtoJSONString() +
      The toJSONString method allows a class to produce its own JSON + serialization.
      +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        toJSONString

        +
        java.lang.String toJSONString()
        +
        The toJSONString method allows a class to produce its own JSON + serialization.
        +
        Returns:
        A strictly syntactically correct JSON text.
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.4/reference/org/json/JSONStringer.html b/distribution/json4processing-0.1.4/reference/org/json/JSONStringer.html new file mode 100644 index 000000000..b2e885a0c --- /dev/null +++ b/distribution/json4processing-0.1.4/reference/org/json/JSONStringer.html @@ -0,0 +1,307 @@ + + + + + +JSONStringer (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class JSONStringer

+
+
+ +
+
    +
  • +
    +
    +
    public class JSONStringer
    +extends JSONWriter
    +
    JSONStringer provides a quick and convenient way of producing JSON text. + The texts produced strictly conform to JSON syntax rules. No whitespace is + added, so the results are ready for transmission or storage. Each instance of + JSONStringer can produce one JSON text. +

    + A JSONStringer instance provides a value method for appending + values to the + text, and a key + method for adding keys before values in objects. There are array + and endArray methods that make and bound array values, and + object and endObject methods which make and bound + object values. All of these methods return the JSONWriter instance, + permitting cascade style. For example,

    + myString = new JSONStringer()
    +     .object()
    +         .key("JSON")
    +         .value("Hello, World!")
    +     .endObject()
    +     .toString();
    which produces the string
    + {"JSON":"Hello, World!"}
    +

    + The first method called must be array or object. + There are no methods for adding commas or colons. JSONStringer adds them for + you. Objects and arrays can be nested up to 20 levels deep. +

    + This can sometimes be easier than using a JSONObject to build a string.

    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      JSONStringer() +
      Make a fresh JSONStringer.
      +
      +
    • +
    + + +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        JSONStringer

        +
        public JSONStringer()
        +
        Make a fresh JSONStringer. It can be used to build one JSON text.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        toString

        +
        public java.lang.String toString()
        +
        Return the JSON text. This method is used to obtain the product of the + JSONStringer instance. It will return null if there was a + problem in the construction of the JSON text (such as the calls to + array were not properly balanced with calls to + endArray).
        +
        +
        Overrides:
        +
        toString in class java.lang.Object
        +
        Returns:
        The JSON text.
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.4/reference/org/json/JSONTokener.html b/distribution/json4processing-0.1.4/reference/org/json/JSONTokener.html new file mode 100644 index 000000000..7011d6005 --- /dev/null +++ b/distribution/json4processing-0.1.4/reference/org/json/JSONTokener.html @@ -0,0 +1,601 @@ + + + + + +JSONTokener (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class JSONTokener

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.json.JSONTokener
    • +
    +
  • +
+
+
    +
  • +
    +
    Direct Known Subclasses:
    +
    HTTPTokener, XMLTokener
    +
    +
    +
    +
    public class JSONTokener
    +extends java.lang.Object
    +
    A JSONTokener takes a source string and extracts characters and tokens from + it. It is used by the JSONObject and JSONArray constructors to parse + JSON source strings.
    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + + + +
      Constructors 
      Constructor and Description
      JSONTokener(java.io.InputStream inputStream) +
      Construct a JSONTokener from an InputStream.
      +
      JSONTokener(java.io.Reader reader) +
      Construct a JSONTokener from a Reader.
      +
      JSONTokener(java.lang.String s) +
      Construct a JSONTokener from a string.
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      voidback() +
      Back up one character.
      +
      static intdehexchar(char c) +
      Get the hex value of a character (base16).
      +
      booleanend() 
      booleanmore() +
      Determine if the source string still contains characters that next() + can consume.
      +
      charnext() +
      Get the next character in the source string.
      +
      charnext(char c) +
      Consume the next character, and check that it matches a specified + character.
      +
      java.lang.Stringnext(int n) +
      Get the next n characters.
      +
      charnextClean() +
      Get the next char in the string, skipping whitespace.
      +
      java.lang.StringnextString(char quote) +
      Return the characters up to the next close quote character.
      +
      java.lang.StringnextTo(char delimiter) +
      Get the text up but not including the specified character or the + end of line, whichever comes first.
      +
      java.lang.StringnextTo(java.lang.String delimiters) +
      Get the text up but not including one of the specified delimiter + characters or the end of line, whichever comes first.
      +
      java.lang.ObjectnextValue() +
      Get the next value.
      +
      charskipTo(char to) +
      Skip characters until the next character is the requested character.
      +
      JSONExceptionsyntaxError(java.lang.String message) +
      Make a JSONException to signal a syntax error.
      +
      java.lang.StringtoString() +
      Make a printable string of this JSONTokener.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        JSONTokener

        +
        public JSONTokener(java.io.Reader reader)
        +
        Construct a JSONTokener from a Reader.
        +
        Parameters:
        reader - A reader.
        +
      • +
      + + + +
        +
      • +

        JSONTokener

        +
        public JSONTokener(java.io.InputStream inputStream)
        +            throws JSONException
        +
        Construct a JSONTokener from an InputStream.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        JSONTokener

        +
        public JSONTokener(java.lang.String s)
        +
        Construct a JSONTokener from a string.
        +
        Parameters:
        s - A source string.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        back

        +
        public void back()
        +          throws JSONException
        +
        Back up one character. This provides a sort of lookahead capability, + so that you can test for a digit or letter before attempting to parse + the next number or identifier.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        dehexchar

        +
        public static int dehexchar(char c)
        +
        Get the hex value of a character (base16).
        +
        Parameters:
        c - A character between '0' and '9' or between 'A' and 'F' or + between 'a' and 'f'.
        +
        Returns:
        An int between 0 and 15, or -1 if c was not a hex digit.
        +
      • +
      + + + +
        +
      • +

        end

        +
        public boolean end()
        +
      • +
      + + + +
        +
      • +

        more

        +
        public boolean more()
        +             throws JSONException
        +
        Determine if the source string still contains characters that next() + can consume.
        +
        Returns:
        true if not yet at the end of the source.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        next

        +
        public char next()
        +          throws JSONException
        +
        Get the next character in the source string.
        +
        Returns:
        The next character, or 0 if past the end of the source string.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        next

        +
        public char next(char c)
        +          throws JSONException
        +
        Consume the next character, and check that it matches a specified + character.
        +
        Parameters:
        c - The character to match.
        +
        Returns:
        The character.
        +
        Throws:
        +
        JSONException - if the character does not match.
        +
      • +
      + + + +
        +
      • +

        next

        +
        public java.lang.String next(int n)
        +                      throws JSONException
        +
        Get the next n characters.
        +
        Parameters:
        n - The number of characters to take.
        +
        Returns:
        A string of n characters.
        +
        Throws:
        +
        JSONException - Substring bounds error if there are not + n characters remaining in the source string.
        +
      • +
      + + + +
        +
      • +

        nextClean

        +
        public char nextClean()
        +               throws JSONException
        +
        Get the next char in the string, skipping whitespace.
        +
        Returns:
        A character, or 0 if there are no more characters.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        nextString

        +
        public java.lang.String nextString(char quote)
        +                            throws JSONException
        +
        Return the characters up to the next close quote character. + Backslash processing is done. The formal JSON format does not + allow strings in single quotes, but an implementation is allowed to + accept them.
        +
        Parameters:
        quote - The quoting character, either + " (double quote) or + ' (single quote).
        +
        Returns:
        A String.
        +
        Throws:
        +
        JSONException - Unterminated string.
        +
      • +
      + + + +
        +
      • +

        nextTo

        +
        public java.lang.String nextTo(char delimiter)
        +                        throws JSONException
        +
        Get the text up but not including the specified character or the + end of line, whichever comes first.
        +
        Parameters:
        delimiter - A delimiter character.
        +
        Returns:
        A string.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        nextTo

        +
        public java.lang.String nextTo(java.lang.String delimiters)
        +                        throws JSONException
        +
        Get the text up but not including one of the specified delimiter + characters or the end of line, whichever comes first.
        +
        Parameters:
        delimiters - A set of delimiter characters.
        +
        Returns:
        A string, trimmed.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        nextValue

        +
        public java.lang.Object nextValue()
        +                           throws JSONException
        +
        Get the next value. The value can be a Boolean, Double, Integer, + JSONArray, JSONObject, Long, or String, or the JSONObject.NULL object.
        +
        Returns:
        An object.
        +
        Throws:
        +
        JSONException - If syntax error.
        +
      • +
      + + + +
        +
      • +

        skipTo

        +
        public char skipTo(char to)
        +            throws JSONException
        +
        Skip characters until the next character is the requested character. + If the requested character is not found, no characters are skipped.
        +
        Parameters:
        to - A character to skip to.
        +
        Returns:
        The requested character, or zero if the requested character + is not found.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        syntaxError

        +
        public JSONException syntaxError(java.lang.String message)
        +
        Make a JSONException to signal a syntax error.
        +
        Parameters:
        message - The error message.
        +
        Returns:
        A JSONException object, suitable for throwing
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public java.lang.String toString()
        +
        Make a printable string of this JSONTokener.
        +
        +
        Overrides:
        +
        toString in class java.lang.Object
        +
        Returns:
        " at {index} [character {character} line {line}]"
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.4/reference/org/json/JSONWriter.html b/distribution/json4processing-0.1.4/reference/org/json/JSONWriter.html new file mode 100644 index 000000000..f3ec23f54 --- /dev/null +++ b/distribution/json4processing-0.1.4/reference/org/json/JSONWriter.html @@ -0,0 +1,474 @@ + + + + + +JSONWriter (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class JSONWriter

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.json.JSONWriter
    • +
    +
  • +
+
+
    +
  • +
    +
    Direct Known Subclasses:
    +
    JSONStringer
    +
    +
    +
    +
    public class JSONWriter
    +extends java.lang.Object
    +
    JSONWriter provides a quick and convenient way of producing JSON text. + The texts produced strictly conform to JSON syntax rules. No whitespace is + added, so the results are ready for transmission or storage. Each instance of + JSONWriter can produce one JSON text. +

    + A JSONWriter instance provides a value method for appending + values to the + text, and a key + method for adding keys before values in objects. There are array + and endArray methods that make and bound array values, and + object and endObject methods which make and bound + object values. All of these methods return the JSONWriter instance, + permitting a cascade style. For example,

    + new JSONWriter(myWriter)
    +     .object()
    +         .key("JSON")
    +         .value("Hello, World!")
    +     .endObject();
    which writes
    + {"JSON":"Hello, World!"}
    +

    + The first method called must be array or object. + There are no methods for adding commas or colons. JSONWriter adds them for + you. Objects and arrays can be nested up to 20 levels deep. +

    + This can sometimes be easier than using a JSONObject to build a string.

    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      JSONWriter(java.io.Writer w) +
      Make a fresh JSONWriter.
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      JSONWriterarray() +
      Begin appending a new array.
      +
      JSONWriterendArray() +
      End an array.
      +
      JSONWriterendObject() +
      End an object.
      +
      JSONWriterkey(java.lang.String string) +
      Append a key.
      +
      JSONWriterobject() +
      Begin appending a new object.
      +
      JSONWritervalue(boolean b) +
      Append either the value true or the value + false.
      +
      JSONWritervalue(double d) +
      Append a double value.
      +
      JSONWritervalue(long l) +
      Append a long value.
      +
      JSONWritervalue(java.lang.Object object) +
      Append an object value.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        JSONWriter

        +
        public JSONWriter(java.io.Writer w)
        +
        Make a fresh JSONWriter. It can be used to build one JSON text.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        array

        +
        public JSONWriter array()
        +                 throws JSONException
        +
        Begin appending a new array. All values until the balancing + endArray will be appended to this array. The + endArray method must be called to mark the array's end.
        +
        Returns:
        this
        +
        Throws:
        +
        JSONException - If the nesting is too deep, or if the object is + started in the wrong place (for example as a key or after the end of the + outermost array or object).
        +
      • +
      + + + +
        +
      • +

        endArray

        +
        public JSONWriter endArray()
        +                    throws JSONException
        +
        End an array. This method most be called to balance calls to + array.
        +
        Returns:
        this
        +
        Throws:
        +
        JSONException - If incorrectly nested.
        +
      • +
      + + + +
        +
      • +

        endObject

        +
        public JSONWriter endObject()
        +                     throws JSONException
        +
        End an object. This method most be called to balance calls to + object.
        +
        Returns:
        this
        +
        Throws:
        +
        JSONException - If incorrectly nested.
        +
      • +
      + + + +
        +
      • +

        key

        +
        public JSONWriter key(java.lang.String string)
        +               throws JSONException
        +
        Append a key. The key will be associated with the next value. In an + object, every value must be preceded by a key.
        +
        Parameters:
        string - A key string.
        +
        Returns:
        this
        +
        Throws:
        +
        JSONException - If the key is out of place. For example, keys + do not belong in arrays or if the key is null.
        +
      • +
      + + + +
        +
      • +

        object

        +
        public JSONWriter object()
        +                  throws JSONException
        +
        Begin appending a new object. All keys and values until the balancing + endObject will be appended to this object. The + endObject method must be called to mark the object's end.
        +
        Returns:
        this
        +
        Throws:
        +
        JSONException - If the nesting is too deep, or if the object is + started in the wrong place (for example as a key or after the end of the + outermost array or object).
        +
      • +
      + + + +
        +
      • +

        value

        +
        public JSONWriter value(boolean b)
        +                 throws JSONException
        +
        Append either the value true or the value + false.
        +
        Parameters:
        b - A boolean.
        +
        Returns:
        this
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        value

        +
        public JSONWriter value(double d)
        +                 throws JSONException
        +
        Append a double value.
        +
        Parameters:
        d - A double.
        +
        Returns:
        this
        +
        Throws:
        +
        JSONException - If the number is not finite.
        +
      • +
      + + + + + + + +
        +
      • +

        value

        +
        public JSONWriter value(java.lang.Object object)
        +                 throws JSONException
        +
        Append an object value.
        +
        Parameters:
        object - The object to append. It can be null, or a Boolean, Number, + String, JSONObject, or JSONArray, or an object that implements JSONString.
        +
        Returns:
        this
        +
        Throws:
        +
        JSONException - If the value is out of sequence.
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.4/reference/org/json/XML.html b/distribution/json4processing-0.1.4/reference/org/json/XML.html new file mode 100644 index 000000000..7c135e549 --- /dev/null +++ b/distribution/json4processing-0.1.4/reference/org/json/XML.html @@ -0,0 +1,552 @@ + + + + + +XML (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class XML

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.json.XML
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class XML
    +extends java.lang.Object
    +
    This provides static methods to convert an XML text into a JSONObject, + and to covert a JSONObject into an XML text.
    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeField and Description
      static java.lang.CharacterAMP +
      The Character '&'.
      +
      static java.lang.CharacterAPOS +
      The Character '''.
      +
      static java.lang.CharacterBANG +
      The Character '!'.
      +
      static java.lang.CharacterEQ +
      The Character '='.
      +
      static java.lang.CharacterGT +
      The Character '>'.
      +
      static java.lang.CharacterLT +
      The Character '<'.
      +
      static java.lang.CharacterQUEST +
      The Character '?'.
      +
      static java.lang.CharacterQUOT +
      The Character '"'.
      +
      static java.lang.CharacterSLASH +
      The Character '/'.
      +
      +
    • +
    + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      XML() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      static java.lang.Stringescape(java.lang.String string) +
      Replace special characters with XML escapes:
      +
      static voidnoSpace(java.lang.String string) +
      Throw an exception if the string contains whitespace.
      +
      static java.lang.ObjectstringToValue(java.lang.String string) +
      Try to convert a string into a number, boolean, or null.
      +
      static JSONObjecttoJSONObject(java.lang.String string) +
      Convert a well-formed (but not necessarily valid) XML string into a + JSONObject.
      +
      static java.lang.StringtoString(java.lang.Object object) +
      Convert a JSONObject into a well-formed, element-normal XML string.
      +
      static java.lang.StringtoString(java.lang.Object object, + java.lang.String tagName) +
      Convert a JSONObject into a well-formed, element-normal XML string.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        AMP

        +
        public static final java.lang.Character AMP
        +
        The Character '&'.
        +
      • +
      + + + +
        +
      • +

        APOS

        +
        public static final java.lang.Character APOS
        +
        The Character '''.
        +
      • +
      + + + +
        +
      • +

        BANG

        +
        public static final java.lang.Character BANG
        +
        The Character '!'.
        +
      • +
      + + + +
        +
      • +

        EQ

        +
        public static final java.lang.Character EQ
        +
        The Character '='.
        +
      • +
      + + + +
        +
      • +

        GT

        +
        public static final java.lang.Character GT
        +
        The Character '>'.
        +
      • +
      + + + +
        +
      • +

        LT

        +
        public static final java.lang.Character LT
        +
        The Character '<'.
        +
      • +
      + + + +
        +
      • +

        QUEST

        +
        public static final java.lang.Character QUEST
        +
        The Character '?'.
        +
      • +
      + + + +
        +
      • +

        QUOT

        +
        public static final java.lang.Character QUOT
        +
        The Character '"'.
        +
      • +
      + + + +
        +
      • +

        SLASH

        +
        public static final java.lang.Character SLASH
        +
        The Character '/'.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        XML

        +
        public XML()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        escape

        +
        public static java.lang.String escape(java.lang.String string)
        +
        Replace special characters with XML escapes: +
        + & (ampersand) is replaced by &amp;
        + < (less than) is replaced by &lt;
        + > (greater than) is replaced by &gt;
        + " (double quote) is replaced by &quot;
        + 
        +
        Parameters:
        string - The string to be escaped.
        +
        Returns:
        The escaped string.
        +
      • +
      + + + +
        +
      • +

        noSpace

        +
        public static void noSpace(java.lang.String string)
        +                    throws JSONException
        +
        Throw an exception if the string contains whitespace. + Whitespace is not allowed in tagNames and attributes.
        +
        Parameters:
        string -
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        stringToValue

        +
        public static java.lang.Object stringToValue(java.lang.String string)
        +
        Try to convert a string into a number, boolean, or null. If the string + can't be converted, return the string. This is much less ambitious than + JSONObject.stringToValue, especially because it does not attempt to + convert plus forms, octal forms, hex forms, or E forms lacking decimal + points.
        +
        Parameters:
        string - A String.
        +
        Returns:
        A simple JSON value.
        +
      • +
      + + + +
        +
      • +

        toJSONObject

        +
        public static JSONObject toJSONObject(java.lang.String string)
        +                               throws JSONException
        +
        Convert a well-formed (but not necessarily valid) XML string into a + JSONObject. Some information may be lost in this transformation + because JSON is a data format and XML is a document format. XML uses + elements, attributes, and content text, while JSON uses unordered + collections of name/value pairs and arrays of values. JSON does not + does not like to distinguish between elements and attributes. + Sequences of similar elements are represented as JSONArrays. Content + text may be placed in a "content" member. Comments, prologs, DTDs, and + <[ [ ]]> are ignored.
        +
        Parameters:
        string - The source string.
        +
        Returns:
        A JSONObject containing the structured data from the XML string.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static java.lang.String toString(java.lang.Object object)
        +                                 throws JSONException
        +
        Convert a JSONObject into a well-formed, element-normal XML string.
        +
        Parameters:
        object - A JSONObject.
        +
        Returns:
        A string.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static java.lang.String toString(java.lang.Object object,
        +                        java.lang.String tagName)
        +                                 throws JSONException
        +
        Convert a JSONObject into a well-formed, element-normal XML string.
        +
        Parameters:
        object - A JSONObject.
        tagName - The optional name of the enclosing tag.
        +
        Returns:
        A string.
        +
        Throws:
        +
        JSONException
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.4/reference/org/json/XMLTokener.html b/distribution/json4processing-0.1.4/reference/org/json/XMLTokener.html new file mode 100644 index 000000000..3ea2d2273 --- /dev/null +++ b/distribution/json4processing-0.1.4/reference/org/json/XMLTokener.html @@ -0,0 +1,433 @@ + + + + + +XMLTokener (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class XMLTokener

+
+
+ +
+
    +
  • +
    +
    +
    public class XMLTokener
    +extends JSONTokener
    +
    The XMLTokener extends the JSONTokener to provide additional methods + for the parsing of XML texts.
    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Summary

      + + + + + + + + + + +
      Fields 
      Modifier and TypeField and Description
      static java.util.HashMapentity +
      The table of entity values.
      +
      +
    • +
    + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      XMLTokener(java.lang.String s) +
      Construct an XMLTokener from a string.
      +
      +
    • +
    + + +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        entity

        +
        public static final java.util.HashMap entity
        +
        The table of entity values. It initially contains Character values for + amp, apos, gt, lt, quot.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        XMLTokener

        +
        public XMLTokener(java.lang.String s)
        +
        Construct an XMLTokener from a string.
        +
        Parameters:
        s - A source string.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        nextCDATA

        +
        public java.lang.String nextCDATA()
        +                           throws JSONException
        +
        Get the text in the CDATA block.
        +
        Returns:
        The string up to the ]]>.
        +
        Throws:
        +
        JSONException - If the ]]> is not found.
        +
      • +
      + + + +
        +
      • +

        nextContent

        +
        public java.lang.Object nextContent()
        +                             throws JSONException
        +
        Get the next XML outer token, trimming whitespace. There are two kinds + of tokens: the '<' character which begins a markup tag, and the content + text between markup tags.
        +
        Returns:
        A string, or a '<' Character, or null if there is no more + source text.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        nextEntity

        +
        public java.lang.Object nextEntity(char ampersand)
        +                            throws JSONException
        +
        Return the next entity. These entities are translated to Characters: + & ' > < ".
        +
        Parameters:
        ampersand - An ampersand character.
        +
        Returns:
        A Character or an entity String if the entity is not recognized.
        +
        Throws:
        +
        JSONException - If missing ';' in XML entity.
        +
      • +
      + + + +
        +
      • +

        nextMeta

        +
        public java.lang.Object nextMeta()
        +                          throws JSONException
        +
        Returns the next XML meta token. This is used for skipping over + and structures.
        +
        Returns:
        Syntax characters (< > / = ! ?) are returned as + Character, and strings and names are returned as Boolean. We don't care + what the values actually are.
        +
        Throws:
        +
        JSONException - If a string is not properly closed or if the XML + is badly structured.
        +
      • +
      + + + +
        +
      • +

        nextToken

        +
        public java.lang.Object nextToken()
        +                           throws JSONException
        +
        Get the next XML Token. These tokens are found inside of angle + brackets. It may be one of these characters: / > = ! ? or it + may be a string wrapped in single quotes or double quotes, or it may be a + name.
        +
        Returns:
        a String or a Character.
        +
        Throws:
        +
        JSONException - If the XML is not well formed.
        +
      • +
      + + + +
        +
      • +

        skipPast

        +
        public boolean skipPast(java.lang.String to)
        +                 throws JSONException
        +
        Skip characters until past the requested string. + If it is not found, we are left at the end of the source with a result of false.
        +
        Parameters:
        to - A string to skip past.
        +
        Throws:
        +
        JSONException
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.4/reference/org/json/package-frame.html b/distribution/json4processing-0.1.4/reference/org/json/package-frame.html new file mode 100644 index 000000000..21d0364d2 --- /dev/null +++ b/distribution/json4processing-0.1.4/reference/org/json/package-frame.html @@ -0,0 +1,39 @@ + + + + + +org.json (Javadocs: json4processing) + + + + +

org.json

+ + + diff --git a/distribution/json4processing-0.1.4/reference/org/json/package-summary.html b/distribution/json4processing-0.1.4/reference/org/json/package-summary.html new file mode 100644 index 000000000..e46064b17 --- /dev/null +++ b/distribution/json4processing-0.1.4/reference/org/json/package-summary.html @@ -0,0 +1,248 @@ + + + + + +org.json (Javadocs: json4processing) + + + + + + + + + + +
+

Package org.json

+
+
+
    +
  • + + + + + + + + + + + + +
    Interface Summary 
    InterfaceDescription
    JSONString +
    The JSONString interface allows a toJSONString() + method so that a class can change the behavior of + JSONObject.toString(), JSONArray.toString(), + and JSONWriter.value(Object).
    +
    +
  • +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    CDL +
    This provides static methods to convert comma delimited text into a + JSONArray, and to covert a JSONArray into comma delimited text.
    +
    Cookie +
    Convert a web browser cookie specification to a JSONObject and back.
    +
    CookieList +
    Convert a web browser cookie list string to a JSONObject and back.
    +
    HTTP +
    Convert an HTTP header to a JSONObject and back.
    +
    HTTPTokener +
    The HTTPTokener extends the JSONTokener to provide additional methods + for the parsing of HTTP headers.
    +
    JSONArray +
    A JSONArray is an ordered sequence of values.
    +
    JSONML +
    This provides static methods to convert an XML text into a JSONArray or + JSONObject, and to covert a JSONArray or JSONObject into an XML text using + the JsonML transform.
    +
    JSONObject +
    A JSONObject is an unordered collection of name/value pairs.
    +
    JSONStringer +
    JSONStringer provides a quick and convenient way of producing JSON text.
    +
    JSONTokener +
    A JSONTokener takes a source string and extracts characters and tokens from + it.
    +
    JSONWriter +
    JSONWriter provides a quick and convenient way of producing JSON text.
    +
    XML +
    This provides static methods to convert an XML text into a JSONObject, + and to covert a JSONObject into an XML text.
    +
    XMLTokener +
    The XMLTokener extends the JSONTokener to provide additional methods + for the parsing of XML texts.
    +
    +
  • +
  • + + + + + + + + + + + + +
    Exception Summary 
    ExceptionDescription
    JSONException +
    The JSONException is thrown by the JSON.org classes when things are amiss.
    +
    +
  • +
+
+ + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.4/reference/org/json/package-tree.html b/distribution/json4processing-0.1.4/reference/org/json/package-tree.html new file mode 100644 index 000000000..24c51c5fb --- /dev/null +++ b/distribution/json4processing-0.1.4/reference/org/json/package-tree.html @@ -0,0 +1,152 @@ + + + + + +org.json Class Hierarchy (Javadocs: json4processing) + + + + + + + +
+ + + + + +
+ + +
+

Hierarchy For Package org.json

+
+
+

Class Hierarchy

+ +

Interface Hierarchy

+ +
+ +
+ + + + + +
+ + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.4/reference/overview-tree.html b/distribution/json4processing-0.1.4/reference/overview-tree.html new file mode 100644 index 000000000..d8f18eb9a --- /dev/null +++ b/distribution/json4processing-0.1.4/reference/overview-tree.html @@ -0,0 +1,156 @@ + + + + + +Class Hierarchy (Javadocs: json4processing) + + + + + + + +
+ + + + + +
+ + +
+

Hierarchy For All Packages

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +

Interface Hierarchy

+ +
+ +
+ + + + + +
+ + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.4/reference/package-list b/distribution/json4processing-0.1.4/reference/package-list new file mode 100644 index 000000000..ccf841806 --- /dev/null +++ b/distribution/json4processing-0.1.4/reference/package-list @@ -0,0 +1 @@ +org.json diff --git a/distribution/json4processing-0.1.4/reference/resources/background.gif b/distribution/json4processing-0.1.4/reference/resources/background.gif new file mode 100644 index 0000000000000000000000000000000000000000..f471940fde2f39ef8943a6af9569bcf986b1579b GIT binary patch literal 2313 zcmV+k3HJ6!Nk%w1VKM-40OkMy00030|NlK(aXwsfKV5S}VtGJbbVOr%L0@%CZH88Q zl{{NzcR^uxNo<2iYk@pjY)*5FJz8x~bc{)B zfk z+1T6M-s9WdW8dcJ-wO*3@9+W*5AY543-j^$^!EPz_4eHZ2#>)41`h@dc!2OAgN6$a zCS2I?;lqgx6IR4nkpTe;1RN0f=zxMq2O=q`94V5d$&e>Unta)^<;;^G3>e7yp=ZvW z6DIW3xpSvaogXF?_4%`@(V;s}NR^5J!3hrtJV@1QRV&r5S*L!zYE|rss${iFkg&!? zTN5V#)~=bmMorwgZsEpdOE)iExo+FO-8;8Kga{=HbSQCnF=E6W3?o*|ID%uwi5**> zJXy127Y9m+=HQ|PhXWi+xNwoWv}n_%Pq%(e+H~mGqhq5kv4Mo|-n~g|7!F*xZ{xv< zCpXS~dGg^IGK?4@J-T%b(XnUHFul6n<@2&4)zzyO2) z3Q8`i0+UKY*`$}e9mmp;tg*))`|PsK1|hAo%u0K$vDwm4gaSkm0j{`26k#qAKmbuhxZ#cquDR>B zD{s8+&TH-uNg$C#68QG}1HMBHfrP&L@@w$F_!itRzXdCN@V|LDAu%3!IDtq1#1UV7 z#1RxvT=B(DWbCoU5l=ia$Pp`Hgb_?Mp@hmtxZDI2N-)v#$}PXVvdm1d>@v(v`0TUJ zF)Pu89(q`zv=w^nVTIF3@3BYIPA}c`(@ZCAwbNBEt@PDUKe5CTR8aB66IE1!w%Amt zy+jpcn~k>GZpVFg+H6x{_uOksvBlq0OyT$6TyQZ37k(cOxZr|JEx1sGm<(M9gH z-~PMqyn|tT=))UN`|-FFFUA#KToK0fUOaz=7}Z~KeHhVC&%O27cTfHQ^WBU8z4p&T zp#>D|V}XShTD;Hx745Iz{`>K-Z$A|7!*Boo{mY;G21vjH8t{M!OrQc6$iN0V@PQDF zpadsK!3tXNf*8!81~qnXWuHZ)kytd=_y+ADWvw31ouV;CdZ#ya*(l7-A-C-Y^+iit8O zBy3*`Ls$|5Hn4m_^I^|C7{m7EFn|5vTk;|oywIgCc9Bb*=L+Y$)M>9GC<|HGs@6NB zHLY%03!dDf=eDRt2O6lVSFRcsuWZEwU?=z$CZ0W?#VJfdN>HG(l%oKpyiftJc|Y)xkjSJYCrQal-0PC~()T9xwF!Jf zVi1UA#3BBbh(i8r5&v#Pz!cF41KjbCc?4u2@@Q~oKLirt2TM30;y6b+zyX2`Yl9u; z`0$3;v0-YUp&7NdPT#q`cZlbij$jvbRk6R>8g*>}*b9E+WDwmpHAAxYzyT aU_pX{M6b8i>#Dq3onfZy}_nli%!Q$ZV%e&!tN2 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 YpWXKgmku8Vj|K)Vje`mzEKCg608Q#dYybcN literal 0 HcmV?d00001 diff --git a/distribution/json4processing-0.1.4/reference/serialized-form.html b/distribution/json4processing-0.1.4/reference/serialized-form.html new file mode 100644 index 000000000..42c7fec9c --- /dev/null +++ b/distribution/json4processing-0.1.4/reference/serialized-form.html @@ -0,0 +1,142 @@ + + + + + +Serialized Form (Javadocs: json4processing) + + + + + + + + + + +
+

Serialized Form

+
+
+
    +
  • +

    Package org.json

    +
      +
    • + + +

      Class org.json.JSONException extends java.lang.Exception implements Serializable

      +
      +
      serialVersionUID:
      +
      0L
      +
      +
        +
      • + + +

        Serialized Fields

        +
          +
        • +

          cause

          +
          java.lang.Throwable cause
          +
        • +
        +
      • +
      +
    • +
    +
  • +
+
+ + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.4/reference/stylesheet.css b/distribution/json4processing-0.1.4/reference/stylesheet.css new file mode 100644 index 000000000..1f18ea6a7 --- /dev/null +++ b/distribution/json4processing-0.1.4/reference/stylesheet.css @@ -0,0 +1,310 @@ +/* Javadoc style sheet */ +/* Define colors, fonts and other style attributes here to override the defaults */ +/* processingLibs style by andreas schlegel, sojamo */ + + +body { + margin : 0; + padding : 0; + padding-left : 10px; + padding-right : 8px; + background-color : #FFFFFF; + font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; + font-size : 100%; + font-size : 0.7em; + font-weight : normal; + line-height : normal; + margin-bottom:30px; +} + + + + +/* Headings */ +h1, h2, h3, h4, h5, th { + font-family :Arial, Helvetica, sans-serif; + font-size:1.2em; +} + + +p { + font-size : 1em; + width:80%; +} + +pre, code { + font-family : "Courier New", Courier, monospace; + font-size : 12px; + line-height : normal; +} + + + +table { + border:0; + margin-bottom:10px; + margin-top:10px; +} + + +tr, td { + border-top: 0px solid; + border-left: 0px solid; + padding-top:8px; + padding-bottom:8px; +} + + + +hr { + border:0; + height:1px; + padding:0; + margin:0; + margin-bottom:4px; + +} + + + +dd, th, td, font { + font-size:1.0em; + line-height:1.0em; +} + + + +dt { + margin-bottom:0px; +} + + + +dd { + margin-top:2px; + margin-bottom:4px; +} + + + +a { + text-decoration: underline; + font-weight: normal; +} + +a:hover, +a:active { + text-decoration: underline; + font-weight: normal; +} + +a:visited, +a:link:visited { + text-decoration: underline; + font-weight: normal; +} + + +img { + border: 0px solid #000000; +} + + + +/* Navigation bar fonts */ +.NavBarCell1 { + border:0; +} + +.NavBarCell1Rev { + border:0; +} + +.NavBarFont1 { + font-family: Arial, Helvetica, sans-serif; + font-size:1.1em; +} + + +.NavBarFont1 b { + font-weight:normal; +} + + + +.NavBarFont1:after, .NavBarFont1Rev:after { + font-weight:normal; + content: " \\"; +} + + +.NavBarFont1Rev { + font-family: Arial, Helvetica, sans-serif; + font-size:1.1em; +} + +.NavBarFont1Rev b { + font-family: Arial, Helvetica, sans-serif; + font-size:1.1em; + font-weight:normal; +} + +.NavBarCell2 { + font-family: Arial, Helvetica, sans-serif; +} + +.NavBarCell3 { + font-family: Arial, Helvetica, sans-serif; +} + + + +font.FrameItemFont { + font-family: Helvetica, Arial, sans-serif; + font-size:1.1em; + line-height:1.1em; +} + +font.FrameHeadingFont { + font-family: Helvetica, Arial, sans-serif; + line-height:32px; +} + +/* Font used in left-hand frame lists */ +.FrameTitleFont { + font-family: Helvetica, Arial, sans-serif +} + + +.toggleList { + padding:0; + margin:0; + margin-top:12px; +} + +.toggleList dt { + font-weight:bold; + font-size:12px; + font-family:arial,sans-serif; + padding:0px; + margin:10px 0px 10px 0px; +} + +.toggleList dt span { + font-family: monospace; + padding:0; + margin:0; +} + + +.toggleList dd { + margin:0; + padding:0; +} + +html.isjs .toggleList dd { + display: none; +} + +.toggleList pre { + padding: 4px 4px 4px 4px; +} + + + + + +/* COLORS */ + +pre, code { + color: #000000; +} + + +body { + color : #333333; + background-color :#FFFFFF; +} + + +h1, h2, h3, h4, h5, h6 { + color:#555; +} + +a, +.toggleList dt { + color: #1a7eb0; +} + +a:hover, +a:active { + color: #1a7eb0; +} + +a:visited, +a:link:visited { + color: #1a7eb0; +} + +td,tr { + border-color: #999999; +} + +hr { + color:#999999; + background:#999999; +} + + +.TableHeadingColor { + background: #dcdcdc; + color: #555; +} + + +.TableSubHeadingColor { + background: #EEEEFF +} + +.TableRowColor { + background: #FFFFFF +} + + +.NavBarCell1 { + background-color:#dcdcdc; + color:#000; +} + +.NavBarCell1 a { + color:#333; +} + + +.NavBarCell1Rev { + background-color:transparent; +} + +.NavBarFont1 { + color:#333; +} + + +.NavBarFont1Rev { + color:#fff; +} + +.NavBarCell2 { + background-color:#999; +} + +.NavBarCell2 a { + color:#fff; +} + + + +.NavBarCell3 { + background-color:#dcdcdc; +} + diff --git a/distribution/json4processing-0.1.4/stylesheet.css b/distribution/json4processing-0.1.4/stylesheet.css new file mode 100644 index 000000000..646d20063 --- /dev/null +++ b/distribution/json4processing-0.1.4/stylesheet.css @@ -0,0 +1,203 @@ +/* processingLibs style by andreas schlegel, sojamo. */ + + +* { + margin:0; + padding:0; + border:0; +} + + +body { + font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; + font-size : 100%; + font-size : 0.70em; + font-weight : normal; + line-height : normal; +} + + + +#container { + margin-left:64px; + background-color:#fff; +} + +#header { + float:left; + padding-top:24px; + padding-bottom:48px; +} + +#menu { + margin-top:16px; + float:left; + margin-bottom:64px; +} + + +#about, +#download, +#examples, +#demos, +#misc { + width:480px; + float:left; + margin-right:24px; +} + + +#resources, #info { + width:320px; + float:left; +} + + +.clear { + clear:both; +} + +#footer { + margin-top:300px; + height:20px; + margin-bottom:32px; +} + + +ul { + list-style:none; + padding:0; + margin:0; +} + + +#menu ul li, #subMenu ul li { + float:left; + padding-right:6px; +} + + + + + + +/* Headings */ + +h1 { + font-size:2em; + font-weight:normal; +} + + +h2, h3, h4, h5, th { + font-size:1.3em; + font-weight:normal; + margin-bottom:4px; +} + + + +p { + font-size:1em; + width:90%; + margin-bottom:32px; +} + + +pre, code { + font-family:"Courier New", Courier, monospace; + font-size:1em; + line-height:normal; +} + + + + +hr { + border:0; + height:1px; + margin-bottom:24px; +} + + +a { + text-decoration: underline; + font-weight: normal; +} + + +a:hover, +a:active { + text-decoration: underline; + font-weight: normal; +} + + +a:visited, +a:link:visited { + text-decoration: underline; + font-weight: normal; +} + + + +img { + border: 0px solid #000000; +} + + + + + +/* COLORS */ + + +body { + color : #333; + background-color :#fff; +} + + +#header { + background-color:#fff; + color:#333; +} + + + +h1, h2, h3, h4, h5, h6 { + color:#666; +} + + +pre, code { + color: #000000; +} + + +a,strong { + color: #333; +} + + +a:hover, +a:active { + color: #333; +} + + +a:visited, +a:link:visited { + color: #333; +} + + +#footer, #menu { + background-color:#fff; + color:#333; +} + + +#footer a, #menu a { + color:#333; +} diff --git a/resources/build.properties b/resources/build.properties index 601fe77c3..8a623648d 100644 --- a/resources/build.properties +++ b/resources/build.properties @@ -1,124 +1,124 @@ -# Create libraries for the open source programming language -# and environment processing (http://www.processing.org) -# -# Customize the build properties to make the ant-build-process -# work for your environment. How? Please read the comments below. -# -# The default properties are set for OSX, for Windows-settings -# please refer to comments made under (1) and (2). - - - -# (1) -# Where is your processing sketchbook located? -# If you are not sure, check the sketchbook location in your -# processing application preferences. -# ${user.home} points the compiler to your home directory -# For windows the default path to your sketchbook would be -# ${user.home}/My Documents/Processing (make adjustments below). - -#sketchbook.location=/media/Contents/sketchbook -sketchbook.location=${user.home}/Documents/Processing - - - -# (2) -# Where are the jar files located that are required for compiling -# your library such as e.g. core.jar? -# by default the local classpath location points to folder libs -# inside eclipse's workspace (by default found in your home directory). -# For Windows the default path would be ${user.home}/workspace/libs -# (make adjustments below) - -#classpath.local.location=/media/Contents/workspace_projects/libs -classpath.local.location=${user.home}/workspace/libs - - - -# For OSX users. -# The following path will direct you into processing's -# application source code folder in case you put processing inside your -# Applications folder. Uncommenting the line below will overwrite the -# classpath.local.location from above. - -# classpath.local.location=/Applications/Processing.app/Contents/Resources/Java/ - - -# Add all jar files that are required for compiling your project -# to the local and project classpath, use a comma as delimiter. -# These jar files must be inside your classpath.local.location folder. - -classpath.local.include=core.jar - - -# Add processing's libraries folder to the classpath. -# If you don't need to include the libraries folder to your classpath, -# comment out the following line. - -classpath.libraries.location=${sketchbook.location}/libraries - - - -# (3) set the java version that should be used to compile your library. - -java.target.version=1.6 - - -# set the description of the ant build.xml file - -ant.description=processingLibs. ant build file. - - - -# (4) -# project details. -# Give your library a name. - -project.name=json4processing - - -# use normal or fast as value for project.compile -# (fast will only compile the project into your sketchbook, -# using normal as property will compile the distribution including the -# javadoc-reference and all web-files - the compile process here -# takes longer) - -project.compile=normal - -# all files compiled with project.compile=normal are stored -# in folder distribution - - - -# (5) -# the following items are properties that will be used to -# make changes to the html document template. values of properties -# will be implemented ito the document automatically. - -# set the current version of your project. - -project.version=0.1.3 -project.copyright=(c) 2011 -project.dependencies=? -project.keywords=? - -author.name=Andreas Goransson -author.url= - -tested.platform=linux, windows -tested.processingversion=1.5.1 - -# recommendations for storing your source code online are: code.google or github. - -source.host=github -source.url=https://github.com/agoransson/JSON-processing -source.repository=https://github.com/agoransson/JSON-processing - - -# include javadoc references into your project's javadoc - -javadoc.java.href= -#http://java.sun.com/javase/6/docs/api/ -javadoc.processing.href= -#http://dev.processing.org/reference/everything/javadoc/ - +# Create libraries for the open source programming language +# and environment processing (http://www.processing.org) +# +# Customize the build properties to make the ant-build-process +# work for your environment. How? Please read the comments below. +# +# The default properties are set for OSX, for Windows-settings +# please refer to comments made under (1) and (2). + + + +# (1) +# Where is your processing sketchbook located? +# If you are not sure, check the sketchbook location in your +# processing application preferences. +# ${user.home} points the compiler to your home directory +# For windows the default path to your sketchbook would be +# ${user.home}/My Documents/Processing (make adjustments below). + +#sketchbook.location=/media/Contents/sketchbook +sketchbook.location=${user.home}/Documents/Processing + + + +# (2) +# Where are the jar files located that are required for compiling +# your library such as e.g. core.jar? +# by default the local classpath location points to folder libs +# inside eclipse's workspace (by default found in your home directory). +# For Windows the default path would be ${user.home}/workspace/libs +# (make adjustments below) + +#classpath.local.location=/media/Contents/workspace_projects/libs +classpath.local.location=${user.home}/workspace/libs + + + +# For OSX users. +# The following path will direct you into processing's +# application source code folder in case you put processing inside your +# Applications folder. Uncommenting the line below will overwrite the +# classpath.local.location from above. + +# classpath.local.location=/Applications/Processing.app/Contents/Resources/Java/ + + +# Add all jar files that are required for compiling your project +# to the local and project classpath, use a comma as delimiter. +# These jar files must be inside your classpath.local.location folder. + +classpath.local.include=core.jar + + +# Add processing's libraries folder to the classpath. +# If you don't need to include the libraries folder to your classpath, +# comment out the following line. + +classpath.libraries.location=${sketchbook.location}/libraries + + + +# (3) set the java version that should be used to compile your library. + +java.target.version=1.6 + + +# set the description of the ant build.xml file + +ant.description=processingLibs. ant build file. + + + +# (4) +# project details. +# Give your library a name. + +project.name=json4processing + + +# use normal or fast as value for project.compile +# (fast will only compile the project into your sketchbook, +# using normal as property will compile the distribution including the +# javadoc-reference and all web-files - the compile process here +# takes longer) + +project.compile=normal + +# all files compiled with project.compile=normal are stored +# in folder distribution + + + +# (5) +# the following items are properties that will be used to +# make changes to the html document template. values of properties +# will be implemented ito the document automatically. + +# set the current version of your project. + +project.version=0.1.4 +project.copyright=(c) 2011 +project.dependencies=? +project.keywords=? + +author.name=Andreas Goransson +author.url= + +tested.platform=linux, windows +tested.processingversion=1.5.1 + +# recommendations for storing your source code online are: code.google or github. + +source.host=github +source.url=https://github.com/agoransson/JSON-processing +source.repository=https://github.com/agoransson/JSON-processing + + +# include javadoc references into your project's javadoc + +javadoc.java.href= +#http://java.sun.com/javase/6/docs/api/ +javadoc.processing.href= +#http://dev.processing.org/reference/everything/javadoc/ + diff --git a/src/org/json/JSONArray.java b/src/org/json/JSONArray.java index 0f82156ef..241482877 100644 --- a/src/org/json/JSONArray.java +++ b/src/org/json/JSONArray.java @@ -1,932 +1,943 @@ -package org.json; - -/* -Copyright (c) 2002 JSON.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -The Software shall be used for Good, not Evil. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -import java.io.IOException; -import java.io.Writer; -import java.lang.reflect.Array; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; -import java.util.Map; - -/** - * A JSONArray is an ordered sequence of values. Its external text form is a - * string wrapped in square brackets with commas separating the values. The - * internal form is an object having get and opt - * methods for accessing the values by index, and put methods for - * adding or replacing values. The values can be any of these types: - * Boolean, JSONArray, JSONObject, - * Number, String, or the - * JSONObject.NULL object. - *

- * The constructor can convert a JSON text into a Java object. The - * toString method converts to JSON text. - *

- * A get method returns a value if one can be found, and throws an - * exception if one cannot be found. An opt method returns a - * default value instead of throwing an exception, and so is useful for - * obtaining optional values. - *

- * The generic get() and opt() methods return an - * object which you can cast or query for type. There are also typed - * get and opt methods that do type checking and type - * coercion for you. - *

- * The texts produced by the toString methods strictly conform to - * JSON syntax rules. The constructors are more forgiving in the texts they will - * accept: - *

    - *
  • An extra , (comma) may appear just - * before the closing bracket.
  • - *
  • The null value will be inserted when there - * is , (comma) elision.
  • - *
  • Strings may be quoted with ' (single - * quote).
  • - *
  • Strings do not need to be quoted at all if they do not begin with a quote - * or single quote, and if they do not contain leading or trailing spaces, - * and if they do not contain any of these characters: - * { } [ ] / \ : , = ; # and if they do not look like numbers - * and if they are not the reserved words true, - * false, or null.
  • - *
  • Values can be separated by ; (semicolon) as - * well as by , (comma).
  • - *
  • Numbers may have the - * 0x- (hex) prefix.
  • - *
- - * @author JSON.org - * @version 2011-08-25 - */ -public class JSONArray { - - - /** - * The arrayList where the JSONArray's properties are kept. - */ - private ArrayList myArrayList; - - - /** - * Construct an empty JSONArray. - */ - public JSONArray() { - this.myArrayList = new ArrayList(); - } - - /** - * Construct a JSONArray from a JSONTokener. - * @param x A JSONTokener - * @throws JSONException If there is a syntax error. - */ - public JSONArray(JSONTokener x) throws JSONException { - this(); - if (x.nextClean() != '[') { - throw x.syntaxError("A JSONArray text must start with '['"); - } - if (x.nextClean() != ']') { - x.back(); - for (;;) { - if (x.nextClean() == ',') { - x.back(); - this.myArrayList.add(JSONObject.NULL); - } else { - x.back(); - this.myArrayList.add(x.nextValue()); - } - switch (x.nextClean()) { - case ';': - case ',': - if (x.nextClean() == ']') { - return; - } - x.back(); - break; - case ']': - return; - default: - throw x.syntaxError("Expected a ',' or ']'"); - } - } - } - } - - - /** - * Construct a JSONArray from a source JSON text. - * @param source A string that begins with - * [ (left bracket) - * and ends with ] (right bracket). - * @throws JSONException If there is a syntax error. - */ - public JSONArray(String source) throws JSONException { - this(new JSONTokener(source)); - } - - - /** - * Construct a JSONArray from a Collection. - * @param collection A Collection. - */ - public JSONArray(Collection collection) { - this.myArrayList = new ArrayList(); - if (collection != null) { - Iterator iter = collection.iterator(); - while (iter.hasNext()) { - this.myArrayList.add(JSONObject.wrap(iter.next())); - } - } - } - - - /** - * Construct a JSONArray from an array - * @throws JSONException If not an array. - */ - public JSONArray(Object array) /*throws JSONException*/ { - this(); - if (array.getClass().isArray()) { - int length = Array.getLength(array); - for (int i = 0; i < length; i += 1) { - this.put(JSONObject.wrap(Array.get(array, i))); - } - } else { -// throw new JSONException( -//"JSONArray initial value should be a string or collection or array."); - System.out.println("JSONArray initial value should be a string or collection or array."); - } - } - - - /** - * Get the object value associated with an index. - * @param index - * The index must be between 0 and length() - 1. - * @return An object value. - * @throws JSONException If there is no value for the index. - */ - public Object get(int index) throws JSONException { - Object object = opt(index); - if (object == null) { - throw new JSONException("JSONArray[" + index + "] not found."); - } - return object; - } - - - /** - * Get the boolean value associated with an index. - * The string values "true" and "false" are converted to boolean. - * - * @param index The index must be between 0 and length() - 1. - * @return The truth. - * @throws JSONException If there is no value for the index or if the - * value is not convertible to boolean. - */ - public boolean getBoolean(int index) throws JSONException { - Object object = get(index); - if (object.equals(Boolean.FALSE) || - (object instanceof String && - ((String)object).equalsIgnoreCase("false"))) { - return false; - } else if (object.equals(Boolean.TRUE) || - (object instanceof String && - ((String)object).equalsIgnoreCase("true"))) { - return true; - } - throw new JSONException("JSONArray[" + index + "] is not a boolean."); - } - - - /** - * Get the double value associated with an index. - * - * @param index The index must be between 0 and length() - 1. - * @return The value. - * @throws JSONException If the key is not found or if the value cannot - * be converted to a number. - */ - public double getDouble(int index) throws JSONException { - Object object = get(index); - try { - return object instanceof Number ? - ((Number)object).doubleValue() : - Double.parseDouble((String)object); - } catch (Exception e) { - throw new JSONException("JSONArray[" + index + - "] is not a number."); - } - } - - - /** - * Get the int value associated with an index. - * - * @param index The index must be between 0 and length() - 1. - * @return The value. - * @throws JSONException If the key is not found or if the value is not a number. - */ - public int getInt(int index) throws JSONException { - Object object = get(index); - try { - return object instanceof Number ? - ((Number)object).intValue() : - Integer.parseInt((String)object); - } catch (Exception e) { - throw new JSONException("JSONArray[" + index + - "] is not a number."); - } - } - - - /** - * Get the JSONArray associated with an index. - * @param index The index must be between 0 and length() - 1. - * @return A JSONArray value. - * @throws JSONException If there is no value for the index. or if the - * value is not a JSONArray - */ - public JSONArray getJSONArray(int index) throws JSONException { - Object object = get(index); - if (object instanceof JSONArray) { - return (JSONArray)object; - } - throw new JSONException("JSONArray[" + index + - "] is not a JSONArray."); - } - - - /** - * Get the JSONObject associated with an index. - * @param index subscript - * @return A JSONObject value. - * @throws JSONException If there is no value for the index or if the - * value is not a JSONObject - */ - public JSONObject getJSONObject(int index) throws JSONException { - Object object = get(index); - if (object instanceof JSONObject) { - return (JSONObject)object; - } - throw new JSONException("JSONArray[" + index + - "] is not a JSONObject."); - } - - - /** - * Get the long value associated with an index. - * - * @param index The index must be between 0 and length() - 1. - * @return The value. - * @throws JSONException If the key is not found or if the value cannot - * be converted to a number. - */ - public long getLong(int index) throws JSONException { - Object object = get(index); - try { - return object instanceof Number ? - ((Number)object).longValue() : - Long.parseLong((String)object); - } catch (Exception e) { - throw new JSONException("JSONArray[" + index + - "] is not a number."); - } - } - - - /** - * Get the string associated with an index. - * @param index The index must be between 0 and length() - 1. - * @return A string value. - * @throws JSONException If there is no string value for the index. - */ - public String getString(int index) throws JSONException { - Object object = get(index); - if (object instanceof String) { - return (String)object; - } - throw new JSONException("JSONArray[" + index + "] not a string."); - } - - - /** - * Determine if the value is null. - * @param index The index must be between 0 and length() - 1. - * @return true if the value at the index is null, or if there is no value. - */ - public boolean isNull(int index) { - return JSONObject.NULL.equals(opt(index)); - } - - - /** - * Make a string from the contents of this JSONArray. The - * separator string is inserted between each element. - * Warning: This method assumes that the data structure is acyclical. - * @param separator A string that will be inserted between the elements. - * @return a string. - * @throws JSONException If the array contains an invalid number. - */ - public String join(String separator) throws JSONException { - int len = length(); - StringBuffer sb = new StringBuffer(); - - for (int i = 0; i < len; i += 1) { - if (i > 0) { - sb.append(separator); - } - sb.append(JSONObject.valueToString(this.myArrayList.get(i))); - } - return sb.toString(); - } - - - /** - * Get the number of elements in the JSONArray, included nulls. - * - * @return The length (or size). - */ - public int length() { - return this.myArrayList.size(); - } - - - /** - * Get the optional object value associated with an index. - * @param index The index must be between 0 and length() - 1. - * @return An object value, or null if there is no - * object at that index. - */ - public Object opt(int index) { - return (index < 0 || index >= length()) ? - null : this.myArrayList.get(index); - } - - - /** - * Get the optional boolean value associated with an index. - * It returns false if there is no value at that index, - * or if the value is not Boolean.TRUE or the String "true". - * - * @param index The index must be between 0 and length() - 1. - * @return The truth. - */ - public boolean optBoolean(int index) { - return optBoolean(index, false); - } - - - /** - * Get the optional boolean value associated with an index. - * It returns the defaultValue if there is no value at that index or if - * it is not a Boolean or the String "true" or "false" (case insensitive). - * - * @param index The index must be between 0 and length() - 1. - * @param defaultValue A boolean default. - * @return The truth. - */ - public boolean optBoolean(int index, boolean defaultValue) { - try { - return getBoolean(index); - } catch (Exception e) { - return defaultValue; - } - } - - - /** - * Get the optional double value associated with an index. - * NaN is returned if there is no value for the index, - * or if the value is not a number and cannot be converted to a number. - * - * @param index The index must be between 0 and length() - 1. - * @return The value. - */ - public double optDouble(int index) { - return optDouble(index, Double.NaN); - } - - - /** - * Get the optional double value associated with an index. - * The defaultValue is returned if there is no value for the index, - * or if the value is not a number and cannot be converted to a number. - * - * @param index subscript - * @param defaultValue The default value. - * @return The value. - */ - public double optDouble(int index, double defaultValue) { - try { - return getDouble(index); - } catch (Exception e) { - return defaultValue; - } - } - - - /** - * Get the optional int value associated with an index. - * Zero is returned if there is no value for the index, - * or if the value is not a number and cannot be converted to a number. - * - * @param index The index must be between 0 and length() - 1. - * @return The value. - */ - public int optInt(int index) { - return optInt(index, 0); - } - - - /** - * Get the optional int value associated with an index. - * The defaultValue is returned if there is no value for the index, - * or if the value is not a number and cannot be converted to a number. - * @param index The index must be between 0 and length() - 1. - * @param defaultValue The default value. - * @return The value. - */ - public int optInt(int index, int defaultValue) { - try { - return getInt(index); - } catch (Exception e) { - return defaultValue; - } - } - - - /** - * Get the optional JSONArray associated with an index. - * @param index subscript - * @return A JSONArray value, or null if the index has no value, - * or if the value is not a JSONArray. - */ - public JSONArray optJSONArray(int index) { - Object o = opt(index); - return o instanceof JSONArray ? (JSONArray)o : null; - } - - - /** - * Get the optional JSONObject associated with an index. - * Null is returned if the key is not found, or null if the index has - * no value, or if the value is not a JSONObject. - * - * @param index The index must be between 0 and length() - 1. - * @return A JSONObject value. - */ - public JSONObject optJSONObject(int index) { - Object o = opt(index); - return o instanceof JSONObject ? (JSONObject)o : null; - } - - - /** - * Get the optional long value associated with an index. - * Zero is returned if there is no value for the index, - * or if the value is not a number and cannot be converted to a number. - * - * @param index The index must be between 0 and length() - 1. - * @return The value. - */ - public long optLong(int index) { - return optLong(index, 0); - } - - - /** - * Get the optional long value associated with an index. - * The defaultValue is returned if there is no value for the index, - * or if the value is not a number and cannot be converted to a number. - * @param index The index must be between 0 and length() - 1. - * @param defaultValue The default value. - * @return The value. - */ - public long optLong(int index, long defaultValue) { - try { - return getLong(index); - } catch (Exception e) { - return defaultValue; - } - } - - - /** - * Get the optional string value associated with an index. It returns an - * empty string if there is no value at that index. If the value - * is not a string and is not null, then it is coverted to a string. - * - * @param index The index must be between 0 and length() - 1. - * @return A String value. - */ - public String optString(int index) { - return optString(index, ""); - } - - - /** - * Get the optional string associated with an index. - * The defaultValue is returned if the key is not found. - * - * @param index The index must be between 0 and length() - 1. - * @param defaultValue The default value. - * @return A String value. - */ - public String optString(int index, String defaultValue) { - Object object = opt(index); - return JSONObject.NULL.equals(object) ? object.toString() : defaultValue; - } - - - /** - * Append a boolean value. This increases the array's length by one. - * - * @param value A boolean value. - * @return this. - */ - public JSONArray put(boolean value) { - put(value ? Boolean.TRUE : Boolean.FALSE); - return this; - } - - - /** - * Put a value in the JSONArray, where the value will be a - * JSONArray which is produced from a Collection. - * @param value A Collection value. - * @return this. - */ - public JSONArray put(Collection value) { - put(new JSONArray(value)); - return this; - } - - - /** - * Append a double value. This increases the array's length by one. - * - * @param value A double value. - * @throws JSONException if the value is not finite. - * @return this. - */ - public JSONArray put(double value) /*throws JSONException*/ { - Double d = new Double(value); - try { - JSONObject.testValidity(d); - } catch (JSONException e) { - e.printStackTrace(); - } - put(d); - return this; - } - - - /** - * Append an int value. This increases the array's length by one. - * - * @param value An int value. - * @return this. - */ - public JSONArray put(int value) { - put(new Integer(value)); - return this; - } - - - /** - * Append an long value. This increases the array's length by one. - * - * @param value A long value. - * @return this. - */ - public JSONArray put(long value) { - put(new Long(value)); - return this; - } - - - /** - * Put a value in the JSONArray, where the value will be a - * JSONObject which is produced from a Map. - * @param value A Map value. - * @return this. - */ - public JSONArray put(Map value) { - put(new JSONObject(value)); - return this; - } - - - /** - * Append an object value. This increases the array's length by one. - * @param value An object value. The value should be a - * Boolean, Double, Integer, JSONArray, JSONObject, Long, or String, or the - * JSONObject.NULL object. - * @return this. - */ - public JSONArray put(Object value) { - this.myArrayList.add(value); - return this; - } - - - /** - * Put or replace a boolean value in the JSONArray. If the index is greater - * than the length of the JSONArray, then null elements will be added as - * necessary to pad it out. - * @param index The subscript. - * @param value A boolean value. - * @return this. - * @throws JSONException If the index is negative. - */ - public JSONArray put(int index, boolean value) /*throws JSONException*/ { - put(index, value ? Boolean.TRUE : Boolean.FALSE); - return this; - } - - - /** - * Put a value in the JSONArray, where the value will be a - * JSONArray which is produced from a Collection. - * @param index The subscript. - * @param value A Collection value. - * @return this. - * @throws JSONException If the index is negative or if the value is - * not finite. - */ - public JSONArray put(int index, Collection value) /*throws JSONException*/ { - put(index, new JSONArray(value)); - return this; - } - - - /** - * Put or replace a double value. If the index is greater than the length of - * the JSONArray, then null elements will be added as necessary to pad - * it out. - * @param index The subscript. - * @param value A double value. - * @return this. - * @throws JSONException If the index is negative or if the value is - * not finite. - */ - public JSONArray put(int index, double value) /*throws JSONException*/ { - put(index, new Double(value)); - return this; - } - - - /** - * Put or replace an int value. If the index is greater than the length of - * the JSONArray, then null elements will be added as necessary to pad - * it out. - * @param index The subscript. - * @param value An int value. - * @return this. - * @throws JSONException If the index is negative. - */ - public JSONArray put(int index, int value) /*throws JSONException*/ { - put(index, new Integer(value)); - return this; - } - - - /** - * Put or replace a long value. If the index is greater than the length of - * the JSONArray, then null elements will be added as necessary to pad - * it out. - * @param index The subscript. - * @param value A long value. - * @return this. - * @throws JSONException If the index is negative. - */ - public JSONArray put(int index, long value) /*throws JSONException*/ { - put(index, new Long(value)); - return this; - } - - - /** - * Put a value in the JSONArray, where the value will be a - * JSONObject that is produced from a Map. - * @param index The subscript. - * @param value The Map value. - * @return this. - * @throws JSONException If the index is negative or if the the value is - * an invalid number. - */ - public JSONArray put(int index, Map value) /*throws JSONException*/ { - put(index, new JSONObject(value)); - return this; - } - - - /** - * Put or replace an object value in the JSONArray. If the index is greater - * than the length of the JSONArray, then null elements will be added as - * necessary to pad it out. - * @param index The subscript. - * @param value The value to put into the array. The value should be a - * Boolean, Double, Integer, JSONArray, JSONObject, Long, or String, or the - * JSONObject.NULL object. - * @return this. - * @throws JSONException If the index is negative or if the the value is - * an invalid number. - */ - public JSONArray put(int index, Object value) /*throws JSONException*/ { - try { - JSONObject.testValidity(value); - } catch (JSONException e) { - e.printStackTrace(); - } - - // No exceptionhandling in the sketch! - // if (index < 0) { - // throw new JSONException("JSONArray[" + index + "] not found."); - // } - if (index < length()) { - this.myArrayList.set(index, value); - } else { - while (index != length()) { - put(JSONObject.NULL); - } - put(value); - } - return this; - } - - - /** - * Remove an index and close the hole. - * @param index The index of the element to be removed. - * @return The value that was associated with the index, - * or null if there was no value. - */ - public Object remove(int index) { - Object o = opt(index); - this.myArrayList.remove(index); - return o; - } - - - /** - * Produce a JSONObject by combining a JSONArray of names with the values - * of this JSONArray. - * @param names A JSONArray containing a list of key strings. These will be - * paired with the values. - * @return A JSONObject, or null if there are no names or if this JSONArray - * has no values. - * @throws JSONException If any of the names are null. - */ - public JSONObject toJSONObject(JSONArray names) throws JSONException { - if (names == null || names.length() == 0 || length() == 0) { - return null; - } - JSONObject jo = new JSONObject(); - for (int i = 0; i < names.length(); i += 1) { - jo.put(names.getString(i), this.opt(i)); - } - return jo; - } - - - /** - * Make a JSON text of this JSONArray. For compactness, no - * unnecessary whitespace is added. If it is not possible to produce a - * syntactically correct JSON text then null will be returned instead. This - * could occur if the array contains an invalid number. - *

- * Warning: This method assumes that the data structure is acyclical. - * - * @return a printable, displayable, transmittable - * representation of the array. - */ - public String toString() { - try { - return '[' + join(",") + ']'; - } catch (Exception e) { - return null; - } - } - - - /** - * Make a prettyprinted JSON text of this JSONArray. - * Warning: This method assumes that the data structure is acyclical. - * @param indentFactor The number of spaces to add to each level of - * indentation. - * @return a printable, displayable, transmittable - * representation of the object, beginning - * with [ (left bracket) and ending - * with ] (right bracket). - * @throws JSONException - */ - public String toString(int indentFactor) throws JSONException { - return toString(indentFactor, 0); - } - - - /** - * Make a prettyprinted JSON text of this JSONArray. - * Warning: This method assumes that the data structure is acyclical. - * @param indentFactor The number of spaces to add to each level of - * indentation. - * @param indent The indention of the top level. - * @return a printable, displayable, transmittable - * representation of the array. - * @throws JSONException - */ - String toString(int indentFactor, int indent) /*throws JSONException*/ { - int len = length(); - if (len == 0) { - return "[]"; - } - int i; - StringBuffer sb = new StringBuffer("["); - if (len == 1) { - sb.append(JSONObject.valueToString(this.myArrayList.get(0), - indentFactor, indent)); - } else { - int newindent = indent + indentFactor; - sb.append('\n'); - for (i = 0; i < len; i += 1) { - if (i > 0) { - sb.append(",\n"); - } - for (int j = 0; j < newindent; j += 1) { - sb.append(' '); - } - sb.append(JSONObject.valueToString(this.myArrayList.get(i), - indentFactor, newindent)); - } - sb.append('\n'); - for (i = 0; i < indent; i += 1) { - sb.append(' '); - } - } - sb.append(']'); - return sb.toString(); - } - - - /** - * Write the contents of the JSONArray as JSON text to a writer. - * For compactness, no whitespace is added. - *

- * Warning: This method assumes that the data structure is acyclical. - * - * @return The writer. - * @throws JSONException - */ - public Writer write(Writer writer) /*throws JSONException*/ { - try { - boolean b = false; - int len = length(); - - writer.write('['); - - for (int i = 0; i < len; i += 1) { - if (b) { - writer.write(','); - } - Object v = this.myArrayList.get(i); - if (v instanceof JSONObject) { - ((JSONObject)v).write(writer); - } else if (v instanceof JSONArray) { - ((JSONArray)v).write(writer); - } else { - writer.write(JSONObject.valueToString(v)); - } - b = true; - } - writer.write(']'); - return writer; - } catch (IOException e) { -// throw new JSONException(e); - e.printStackTrace(); - } - return writer; - } +package org.json; + +/* +Copyright (c) 2002 JSON.org + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +The Software shall be used for Good, not Evil. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +import java.io.IOException; +import java.io.Writer; +import java.lang.reflect.Array; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.Map; + +/** + * A JSONArray is an ordered sequence of values. Its external text form is a + * string wrapped in square brackets with commas separating the values. The + * internal form is an object having get and opt + * methods for accessing the values by index, and put methods for + * adding or replacing values. The values can be any of these types: + * Boolean, JSONArray, JSONObject, + * Number, String, or the + * JSONObject.NULL object. + *

+ * The constructor can convert a JSON text into a Java object. The + * toString method converts to JSON text. + *

+ * A get method returns a value if one can be found, and throws an + * exception if one cannot be found. An opt method returns a + * default value instead of throwing an exception, and so is useful for + * obtaining optional values. + *

+ * The generic get() and opt() methods return an + * object which you can cast or query for type. There are also typed + * get and opt methods that do type checking and type + * coercion for you. + *

+ * The texts produced by the toString methods strictly conform to + * JSON syntax rules. The constructors are more forgiving in the texts they will + * accept: + *

    + *
  • An extra , (comma) may appear just + * before the closing bracket.
  • + *
  • The null value will be inserted when there + * is , (comma) elision.
  • + *
  • Strings may be quoted with ' (single + * quote).
  • + *
  • Strings do not need to be quoted at all if they do not begin with a quote + * or single quote, and if they do not contain leading or trailing spaces, + * and if they do not contain any of these characters: + * { } [ ] / \ : , = ; # and if they do not look like numbers + * and if they are not the reserved words true, + * false, or null.
  • + *
  • Values can be separated by ; (semicolon) as + * well as by , (comma).
  • + *
  • Numbers may have the + * 0x- (hex) prefix.
  • + *
+ + * @author JSON.org + * @version 2011-08-25 + */ +public class JSONArray { + + + /** + * The arrayList where the JSONArray's properties are kept. + */ + private ArrayList myArrayList; + + + /** + * Construct an empty JSONArray. + */ + public JSONArray() { + this.myArrayList = new ArrayList(); + } + + /** + * Construct a JSONArray from a JSONTokener. + * @param x A JSONTokener + * @throws JSONException If there is a syntax error. + */ + public JSONArray(JSONTokener x) throws JSONException { + this(); + if (x.nextClean() != '[') { + throw x.syntaxError("A JSONArray text must start with '['"); + } + if (x.nextClean() != ']') { + x.back(); + for (;;) { + if (x.nextClean() == ',') { + x.back(); + this.myArrayList.add(JSONObject.NULL); + } else { + x.back(); + this.myArrayList.add(x.nextValue()); + } + switch (x.nextClean()) { + case ';': + case ',': + if (x.nextClean() == ']') { + return; + } + x.back(); + break; + case ']': + return; + default: + throw x.syntaxError("Expected a ',' or ']'"); + } + } + } + } + + + /** + * Construct a JSONArray from a source JSON text. + * @param source A string that begins with + * [ (left bracket) + * and ends with ] (right bracket). + * @throws JSONException If there is a syntax error. + */ + public JSONArray(String source) throws JSONException { + this(new JSONTokener(source)); + } + + + /** + * Construct a JSONArray from a Collection. + * @param collection A Collection. + */ + public JSONArray(Collection collection) { + this.myArrayList = new ArrayList(); + if (collection != null) { + Iterator iter = collection.iterator(); + while (iter.hasNext()) { + this.myArrayList.add(JSONObject.wrap(iter.next())); + } + } + } + + + /** + * Construct a JSONArray from an array + * @throws JSONException If not an array. + */ + public JSONArray(Object array) /*throws JSONException*/ { + this(); + if (array.getClass().isArray()) { + int length = Array.getLength(array); + for (int i = 0; i < length; i += 1) { + this.put(JSONObject.wrap(Array.get(array, i))); + } + } else { +// throw new JSONException( +//"JSONArray initial value should be a string or collection or array."); + System.out.println("JSONArray initial value should be a string or collection or array."); + } + } + + + /** + * Get the object value associated with an index. + * @param index + * The index must be between 0 and length() - 1. + * @return An object value. + * @throws JSONException If there is no value for the index. + */ + public Object get(int index) throws JSONException { + Object object = opt(index); + if (object == null) { + throw new JSONException("JSONArray[" + index + "] not found."); + } + return object; + } + + + /** + * Get the boolean value associated with an index. + * The string values "true" and "false" are converted to boolean. + * + * @param index The index must be between 0 and length() - 1. + * @return The truth. + * @throws JSONException If there is no value for the index or if the + * value is not convertible to boolean. + */ + public boolean getBoolean(int index) throws JSONException { + Object object = get(index); + if (object.equals(Boolean.FALSE) || + (object instanceof String && + ((String)object).equalsIgnoreCase("false"))) { + return false; + } else if (object.equals(Boolean.TRUE) || + (object instanceof String && + ((String)object).equalsIgnoreCase("true"))) { + return true; + } + throw new JSONException("JSONArray[" + index + "] is not a boolean."); + } + + + /** + * Get the double value associated with an index. + * + * @param index The index must be between 0 and length() - 1. + * @return The value. + * @throws JSONException If the key is not found or if the value cannot + * be converted to a number. + */ + public double getDouble(int index) throws JSONException { + Object object = get(index); + try { + return object instanceof Number ? + ((Number)object).doubleValue() : + Double.parseDouble((String)object); + } catch (Exception e) { + throw new JSONException("JSONArray[" + index + + "] is not a number."); + } + } + + + /** + * Get the int value associated with an index. + * + * @param index The index must be between 0 and length() - 1. + * @return The value. + * @throws JSONException If the key is not found or if the value is not a number. + */ + public int getInt(int index) throws JSONException { + Object object = get(index); + try { + return object instanceof Number ? + ((Number)object).intValue() : + Integer.parseInt((String)object); + } catch (Exception e) { + throw new JSONException("JSONArray[" + index + + "] is not a number."); + } + } + + + /** + * Get the JSONArray associated with an index. + * @param index The index must be between 0 and length() - 1. + * @return A JSONArray value. + * @throws JSONException If there is no value for the index. or if the + * value is not a JSONArray + */ + public JSONArray getJSONArray(int index) throws JSONException { + Object object = get(index); + if (object instanceof JSONArray) { + return (JSONArray)object; + } + throw new JSONException("JSONArray[" + index + + "] is not a JSONArray."); + } + + + /** + * Get the JSONObject associated with an index. + * @param index subscript + * @return A JSONObject value. + * @throws JSONException If there is no value for the index or if the + * value is not a JSONObject + */ + public JSONObject getJSONObject(int index) /*throws JSONException*/ { + Object object = null; + try { + object = get(index); + } catch (JSONException e) { +// e.printStackTrace(); + System.out.println( "JSONArray[" + index + "] is not a JSONObject." ); + } + + if( object == null ) + return null; + + if (object instanceof JSONObject) { + return (JSONObject)object; + } +// throw new JSONException("JSONArray[" + index + +// "] is not a JSONObject."); + return null; + } + + + /** + * Get the long value associated with an index. + * + * @param index The index must be between 0 and length() - 1. + * @return The value. + * @throws JSONException If the key is not found or if the value cannot + * be converted to a number. + */ + public long getLong(int index) throws JSONException { + Object object = get(index); + try { + return object instanceof Number ? + ((Number)object).longValue() : + Long.parseLong((String)object); + } catch (Exception e) { + throw new JSONException("JSONArray[" + index + + "] is not a number."); + } + } + + + /** + * Get the string associated with an index. + * @param index The index must be between 0 and length() - 1. + * @return A string value. + * @throws JSONException If there is no string value for the index. + */ + public String getString(int index) throws JSONException { + Object object = get(index); + if (object instanceof String) { + return (String)object; + } + throw new JSONException("JSONArray[" + index + "] not a string."); + } + + + /** + * Determine if the value is null. + * @param index The index must be between 0 and length() - 1. + * @return true if the value at the index is null, or if there is no value. + */ + public boolean isNull(int index) { + return JSONObject.NULL.equals(opt(index)); + } + + + /** + * Make a string from the contents of this JSONArray. The + * separator string is inserted between each element. + * Warning: This method assumes that the data structure is acyclical. + * @param separator A string that will be inserted between the elements. + * @return a string. + * @throws JSONException If the array contains an invalid number. + */ + public String join(String separator) throws JSONException { + int len = length(); + StringBuffer sb = new StringBuffer(); + + for (int i = 0; i < len; i += 1) { + if (i > 0) { + sb.append(separator); + } + sb.append(JSONObject.valueToString(this.myArrayList.get(i))); + } + return sb.toString(); + } + + + /** + * Get the number of elements in the JSONArray, included nulls. + * + * @return The length (or size). + */ + public int length() { + return this.myArrayList.size(); + } + + + /** + * Get the optional object value associated with an index. + * @param index The index must be between 0 and length() - 1. + * @return An object value, or null if there is no + * object at that index. + */ + public Object opt(int index) { + return (index < 0 || index >= length()) ? + null : this.myArrayList.get(index); + } + + + /** + * Get the optional boolean value associated with an index. + * It returns false if there is no value at that index, + * or if the value is not Boolean.TRUE or the String "true". + * + * @param index The index must be between 0 and length() - 1. + * @return The truth. + */ + public boolean optBoolean(int index) { + return optBoolean(index, false); + } + + + /** + * Get the optional boolean value associated with an index. + * It returns the defaultValue if there is no value at that index or if + * it is not a Boolean or the String "true" or "false" (case insensitive). + * + * @param index The index must be between 0 and length() - 1. + * @param defaultValue A boolean default. + * @return The truth. + */ + public boolean optBoolean(int index, boolean defaultValue) { + try { + return getBoolean(index); + } catch (Exception e) { + return defaultValue; + } + } + + + /** + * Get the optional double value associated with an index. + * NaN is returned if there is no value for the index, + * or if the value is not a number and cannot be converted to a number. + * + * @param index The index must be between 0 and length() - 1. + * @return The value. + */ + public double optDouble(int index) { + return optDouble(index, Double.NaN); + } + + + /** + * Get the optional double value associated with an index. + * The defaultValue is returned if there is no value for the index, + * or if the value is not a number and cannot be converted to a number. + * + * @param index subscript + * @param defaultValue The default value. + * @return The value. + */ + public double optDouble(int index, double defaultValue) { + try { + return getDouble(index); + } catch (Exception e) { + return defaultValue; + } + } + + + /** + * Get the optional int value associated with an index. + * Zero is returned if there is no value for the index, + * or if the value is not a number and cannot be converted to a number. + * + * @param index The index must be between 0 and length() - 1. + * @return The value. + */ + public int optInt(int index) { + return optInt(index, 0); + } + + + /** + * Get the optional int value associated with an index. + * The defaultValue is returned if there is no value for the index, + * or if the value is not a number and cannot be converted to a number. + * @param index The index must be between 0 and length() - 1. + * @param defaultValue The default value. + * @return The value. + */ + public int optInt(int index, int defaultValue) { + try { + return getInt(index); + } catch (Exception e) { + return defaultValue; + } + } + + + /** + * Get the optional JSONArray associated with an index. + * @param index subscript + * @return A JSONArray value, or null if the index has no value, + * or if the value is not a JSONArray. + */ + public JSONArray optJSONArray(int index) { + Object o = opt(index); + return o instanceof JSONArray ? (JSONArray)o : null; + } + + + /** + * Get the optional JSONObject associated with an index. + * Null is returned if the key is not found, or null if the index has + * no value, or if the value is not a JSONObject. + * + * @param index The index must be between 0 and length() - 1. + * @return A JSONObject value. + */ + public JSONObject optJSONObject(int index) { + Object o = opt(index); + return o instanceof JSONObject ? (JSONObject)o : null; + } + + + /** + * Get the optional long value associated with an index. + * Zero is returned if there is no value for the index, + * or if the value is not a number and cannot be converted to a number. + * + * @param index The index must be between 0 and length() - 1. + * @return The value. + */ + public long optLong(int index) { + return optLong(index, 0); + } + + + /** + * Get the optional long value associated with an index. + * The defaultValue is returned if there is no value for the index, + * or if the value is not a number and cannot be converted to a number. + * @param index The index must be between 0 and length() - 1. + * @param defaultValue The default value. + * @return The value. + */ + public long optLong(int index, long defaultValue) { + try { + return getLong(index); + } catch (Exception e) { + return defaultValue; + } + } + + + /** + * Get the optional string value associated with an index. It returns an + * empty string if there is no value at that index. If the value + * is not a string and is not null, then it is coverted to a string. + * + * @param index The index must be between 0 and length() - 1. + * @return A String value. + */ + public String optString(int index) { + return optString(index, ""); + } + + + /** + * Get the optional string associated with an index. + * The defaultValue is returned if the key is not found. + * + * @param index The index must be between 0 and length() - 1. + * @param defaultValue The default value. + * @return A String value. + */ + public String optString(int index, String defaultValue) { + Object object = opt(index); + return JSONObject.NULL.equals(object) ? object.toString() : defaultValue; + } + + + /** + * Append a boolean value. This increases the array's length by one. + * + * @param value A boolean value. + * @return this. + */ + public JSONArray put(boolean value) { + put(value ? Boolean.TRUE : Boolean.FALSE); + return this; + } + + + /** + * Put a value in the JSONArray, where the value will be a + * JSONArray which is produced from a Collection. + * @param value A Collection value. + * @return this. + */ + public JSONArray put(Collection value) { + put(new JSONArray(value)); + return this; + } + + + /** + * Append a double value. This increases the array's length by one. + * + * @param value A double value. + * @throws JSONException if the value is not finite. + * @return this. + */ + public JSONArray put(double value) /*throws JSONException*/ { + Double d = new Double(value); + try { + JSONObject.testValidity(d); + } catch (JSONException e) { + e.printStackTrace(); + } + put(d); + return this; + } + + + /** + * Append an int value. This increases the array's length by one. + * + * @param value An int value. + * @return this. + */ + public JSONArray put(int value) { + put(new Integer(value)); + return this; + } + + + /** + * Append an long value. This increases the array's length by one. + * + * @param value A long value. + * @return this. + */ + public JSONArray put(long value) { + put(new Long(value)); + return this; + } + + + /** + * Put a value in the JSONArray, where the value will be a + * JSONObject which is produced from a Map. + * @param value A Map value. + * @return this. + */ + public JSONArray put(Map value) { + put(new JSONObject(value)); + return this; + } + + + /** + * Append an object value. This increases the array's length by one. + * @param value An object value. The value should be a + * Boolean, Double, Integer, JSONArray, JSONObject, Long, or String, or the + * JSONObject.NULL object. + * @return this. + */ + public JSONArray put(Object value) { + this.myArrayList.add(value); + return this; + } + + + /** + * Put or replace a boolean value in the JSONArray. If the index is greater + * than the length of the JSONArray, then null elements will be added as + * necessary to pad it out. + * @param index The subscript. + * @param value A boolean value. + * @return this. + * @throws JSONException If the index is negative. + */ + public JSONArray put(int index, boolean value) /*throws JSONException*/ { + put(index, value ? Boolean.TRUE : Boolean.FALSE); + return this; + } + + + /** + * Put a value in the JSONArray, where the value will be a + * JSONArray which is produced from a Collection. + * @param index The subscript. + * @param value A Collection value. + * @return this. + * @throws JSONException If the index is negative or if the value is + * not finite. + */ + public JSONArray put(int index, Collection value) /*throws JSONException*/ { + put(index, new JSONArray(value)); + return this; + } + + + /** + * Put or replace a double value. If the index is greater than the length of + * the JSONArray, then null elements will be added as necessary to pad + * it out. + * @param index The subscript. + * @param value A double value. + * @return this. + * @throws JSONException If the index is negative or if the value is + * not finite. + */ + public JSONArray put(int index, double value) /*throws JSONException*/ { + put(index, new Double(value)); + return this; + } + + + /** + * Put or replace an int value. If the index is greater than the length of + * the JSONArray, then null elements will be added as necessary to pad + * it out. + * @param index The subscript. + * @param value An int value. + * @return this. + * @throws JSONException If the index is negative. + */ + public JSONArray put(int index, int value) /*throws JSONException*/ { + put(index, new Integer(value)); + return this; + } + + + /** + * Put or replace a long value. If the index is greater than the length of + * the JSONArray, then null elements will be added as necessary to pad + * it out. + * @param index The subscript. + * @param value A long value. + * @return this. + * @throws JSONException If the index is negative. + */ + public JSONArray put(int index, long value) /*throws JSONException*/ { + put(index, new Long(value)); + return this; + } + + + /** + * Put a value in the JSONArray, where the value will be a + * JSONObject that is produced from a Map. + * @param index The subscript. + * @param value The Map value. + * @return this. + * @throws JSONException If the index is negative or if the the value is + * an invalid number. + */ + public JSONArray put(int index, Map value) /*throws JSONException*/ { + put(index, new JSONObject(value)); + return this; + } + + + /** + * Put or replace an object value in the JSONArray. If the index is greater + * than the length of the JSONArray, then null elements will be added as + * necessary to pad it out. + * @param index The subscript. + * @param value The value to put into the array. The value should be a + * Boolean, Double, Integer, JSONArray, JSONObject, Long, or String, or the + * JSONObject.NULL object. + * @return this. + * @throws JSONException If the index is negative or if the the value is + * an invalid number. + */ + public JSONArray put(int index, Object value) /*throws JSONException*/ { + try { + JSONObject.testValidity(value); + } catch (JSONException e) { + e.printStackTrace(); + } + + // No exceptionhandling in the sketch! + // if (index < 0) { + // throw new JSONException("JSONArray[" + index + "] not found."); + // } + if (index < length()) { + this.myArrayList.set(index, value); + } else { + while (index != length()) { + put(JSONObject.NULL); + } + put(value); + } + return this; + } + + + /** + * Remove an index and close the hole. + * @param index The index of the element to be removed. + * @return The value that was associated with the index, + * or null if there was no value. + */ + public Object remove(int index) { + Object o = opt(index); + this.myArrayList.remove(index); + return o; + } + + + /** + * Produce a JSONObject by combining a JSONArray of names with the values + * of this JSONArray. + * @param names A JSONArray containing a list of key strings. These will be + * paired with the values. + * @return A JSONObject, or null if there are no names or if this JSONArray + * has no values. + * @throws JSONException If any of the names are null. + */ + public JSONObject toJSONObject(JSONArray names) throws JSONException { + if (names == null || names.length() == 0 || length() == 0) { + return null; + } + JSONObject jo = new JSONObject(); + for (int i = 0; i < names.length(); i += 1) { + jo.put(names.getString(i), this.opt(i)); + } + return jo; + } + + + /** + * Make a JSON text of this JSONArray. For compactness, no + * unnecessary whitespace is added. If it is not possible to produce a + * syntactically correct JSON text then null will be returned instead. This + * could occur if the array contains an invalid number. + *

+ * Warning: This method assumes that the data structure is acyclical. + * + * @return a printable, displayable, transmittable + * representation of the array. + */ + public String toString() { + try { + return '[' + join(",") + ']'; + } catch (Exception e) { + return null; + } + } + + + /** + * Make a prettyprinted JSON text of this JSONArray. + * Warning: This method assumes that the data structure is acyclical. + * @param indentFactor The number of spaces to add to each level of + * indentation. + * @return a printable, displayable, transmittable + * representation of the object, beginning + * with [ (left bracket) and ending + * with ] (right bracket). + * @throws JSONException + */ + public String toString(int indentFactor) throws JSONException { + return toString(indentFactor, 0); + } + + + /** + * Make a prettyprinted JSON text of this JSONArray. + * Warning: This method assumes that the data structure is acyclical. + * @param indentFactor The number of spaces to add to each level of + * indentation. + * @param indent The indention of the top level. + * @return a printable, displayable, transmittable + * representation of the array. + * @throws JSONException + */ + String toString(int indentFactor, int indent) /*throws JSONException*/ { + int len = length(); + if (len == 0) { + return "[]"; + } + int i; + StringBuffer sb = new StringBuffer("["); + if (len == 1) { + sb.append(JSONObject.valueToString(this.myArrayList.get(0), + indentFactor, indent)); + } else { + int newindent = indent + indentFactor; + sb.append('\n'); + for (i = 0; i < len; i += 1) { + if (i > 0) { + sb.append(",\n"); + } + for (int j = 0; j < newindent; j += 1) { + sb.append(' '); + } + sb.append(JSONObject.valueToString(this.myArrayList.get(i), + indentFactor, newindent)); + } + sb.append('\n'); + for (i = 0; i < indent; i += 1) { + sb.append(' '); + } + } + sb.append(']'); + return sb.toString(); + } + + + /** + * Write the contents of the JSONArray as JSON text to a writer. + * For compactness, no whitespace is added. + *

+ * Warning: This method assumes that the data structure is acyclical. + * + * @return The writer. + * @throws JSONException + */ + public Writer write(Writer writer) /*throws JSONException*/ { + try { + boolean b = false; + int len = length(); + + writer.write('['); + + for (int i = 0; i < len; i += 1) { + if (b) { + writer.write(','); + } + Object v = this.myArrayList.get(i); + if (v instanceof JSONObject) { + ((JSONObject)v).write(writer); + } else if (v instanceof JSONArray) { + ((JSONArray)v).write(writer); + } else { + writer.write(JSONObject.valueToString(v)); + } + b = true; + } + writer.write(']'); + return writer; + } catch (IOException e) { +// throw new JSONException(e); + e.printStackTrace(); + } + return writer; + } } \ No newline at end of file From b1998d009b3c1c896b8bda80f20147d1bd8c2b0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20G=C3=B6ransson?= Date: Wed, 28 Nov 2012 17:59:10 +0100 Subject: [PATCH 04/26] Removed another exception from JSONArray class --- .../download/json4processing-0.1.5.zip | Bin 0 -> 181632 bytes .../create_jsonarray/create_jsonarray.pde | 23 + .../create_jsonarray_of_objects.pde | 31 + .../create_jsonobject/create_jsonobject.pde | 22 + .../create_jsonobject_from_httpheader.pde | 57 + .../create_jsonobject_from_string.pde | 20 + .../reading_yahoo_weather.pde | 37 + .../write_jsonarray_of_objects.pde | 56 + distribution/json4processing-0.1.5/index.html | 132 ++ .../reference/allclasses-frame.html | 32 + .../reference/allclasses-noframe.html | 32 + .../reference/constant-values.html | 141 ++ .../reference/deprecated-list.html | 112 ++ .../reference/help-doc.html | 209 +++ .../reference/index-all.html | 1134 ++++++++++++ .../reference/index.html | 30 + .../reference/org/json/CDL.html | 470 +++++ .../reference/org/json/Cookie.html | 347 ++++ .../reference/org/json/CookieList.html | 295 +++ .../reference/org/json/HTTP.html | 363 ++++ .../reference/org/json/HTTPTokener.html | 280 +++ .../reference/org/json/JSONArray.html | 1284 +++++++++++++ .../reference/org/json/JSONException.html | 298 +++ .../reference/org/json/JSONML.html | 404 ++++ .../reference/org/json/JSONObject.html | 1626 +++++++++++++++++ .../reference/org/json/JSONString.html | 215 +++ .../reference/org/json/JSONStringer.html | 307 ++++ .../reference/org/json/JSONTokener.html | 601 ++++++ .../reference/org/json/JSONWriter.html | 474 +++++ .../reference/org/json/XML.html | 552 ++++++ .../reference/org/json/XMLTokener.html | 433 +++++ .../reference/org/json/package-frame.html | 39 + .../reference/org/json/package-summary.html | 248 +++ .../reference/org/json/package-tree.html | 152 ++ .../reference/overview-tree.html | 156 ++ .../reference/package-list | 1 + .../reference/resources/background.gif | Bin 0 -> 2313 bytes .../reference/resources/tab.gif | Bin 0 -> 291 bytes .../reference/resources/titlebar.gif | Bin 0 -> 10701 bytes .../reference/resources/titlebar_end.gif | Bin 0 -> 849 bytes .../reference/serialized-form.html | 142 ++ .../reference/stylesheet.css | 310 ++++ .../json4processing-0.1.5/stylesheet.css | 203 ++ resources/build.properties | 2 +- src/org/json/JSONArray.java | 13 +- 45 files changed, 11276 insertions(+), 7 deletions(-) create mode 100644 distribution/json4processing-0.1.5/download/json4processing-0.1.5.zip create mode 100644 distribution/json4processing-0.1.5/examples/create_jsonarray/create_jsonarray.pde create mode 100644 distribution/json4processing-0.1.5/examples/create_jsonarray_of_objects/create_jsonarray_of_objects.pde create mode 100644 distribution/json4processing-0.1.5/examples/create_jsonobject/create_jsonobject.pde create mode 100644 distribution/json4processing-0.1.5/examples/create_jsonobject_from_httpheader/create_jsonobject_from_httpheader.pde create mode 100644 distribution/json4processing-0.1.5/examples/create_jsonobject_from_string/create_jsonobject_from_string.pde create mode 100644 distribution/json4processing-0.1.5/examples/reading_yahoo_weather/reading_yahoo_weather.pde create mode 100644 distribution/json4processing-0.1.5/examples/write_jsonarray_of_objects/write_jsonarray_of_objects.pde create mode 100644 distribution/json4processing-0.1.5/index.html create mode 100644 distribution/json4processing-0.1.5/reference/allclasses-frame.html create mode 100644 distribution/json4processing-0.1.5/reference/allclasses-noframe.html create mode 100644 distribution/json4processing-0.1.5/reference/constant-values.html create mode 100644 distribution/json4processing-0.1.5/reference/deprecated-list.html create mode 100644 distribution/json4processing-0.1.5/reference/help-doc.html create mode 100644 distribution/json4processing-0.1.5/reference/index-all.html create mode 100644 distribution/json4processing-0.1.5/reference/index.html create mode 100644 distribution/json4processing-0.1.5/reference/org/json/CDL.html create mode 100644 distribution/json4processing-0.1.5/reference/org/json/Cookie.html create mode 100644 distribution/json4processing-0.1.5/reference/org/json/CookieList.html create mode 100644 distribution/json4processing-0.1.5/reference/org/json/HTTP.html create mode 100644 distribution/json4processing-0.1.5/reference/org/json/HTTPTokener.html create mode 100644 distribution/json4processing-0.1.5/reference/org/json/JSONArray.html create mode 100644 distribution/json4processing-0.1.5/reference/org/json/JSONException.html create mode 100644 distribution/json4processing-0.1.5/reference/org/json/JSONML.html create mode 100644 distribution/json4processing-0.1.5/reference/org/json/JSONObject.html create mode 100644 distribution/json4processing-0.1.5/reference/org/json/JSONString.html create mode 100644 distribution/json4processing-0.1.5/reference/org/json/JSONStringer.html create mode 100644 distribution/json4processing-0.1.5/reference/org/json/JSONTokener.html create mode 100644 distribution/json4processing-0.1.5/reference/org/json/JSONWriter.html create mode 100644 distribution/json4processing-0.1.5/reference/org/json/XML.html create mode 100644 distribution/json4processing-0.1.5/reference/org/json/XMLTokener.html create mode 100644 distribution/json4processing-0.1.5/reference/org/json/package-frame.html create mode 100644 distribution/json4processing-0.1.5/reference/org/json/package-summary.html create mode 100644 distribution/json4processing-0.1.5/reference/org/json/package-tree.html create mode 100644 distribution/json4processing-0.1.5/reference/overview-tree.html create mode 100644 distribution/json4processing-0.1.5/reference/package-list create mode 100644 distribution/json4processing-0.1.5/reference/resources/background.gif create mode 100644 distribution/json4processing-0.1.5/reference/resources/tab.gif create mode 100644 distribution/json4processing-0.1.5/reference/resources/titlebar.gif create mode 100644 distribution/json4processing-0.1.5/reference/resources/titlebar_end.gif create mode 100644 distribution/json4processing-0.1.5/reference/serialized-form.html create mode 100644 distribution/json4processing-0.1.5/reference/stylesheet.css create mode 100644 distribution/json4processing-0.1.5/stylesheet.css diff --git a/distribution/json4processing-0.1.5/download/json4processing-0.1.5.zip b/distribution/json4processing-0.1.5/download/json4processing-0.1.5.zip new file mode 100644 index 0000000000000000000000000000000000000000..e64b1d2767578a43d65d8fdae36f150bb576db80 GIT binary patch literal 181632 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�^DuGr)F7<&&|L3 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,%e^Wp$X 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 STPp+q(t(85R|G@{=>Gsh?ghmF literal 0 HcmV?d00001 diff --git a/distribution/json4processing-0.1.5/examples/create_jsonarray/create_jsonarray.pde b/distribution/json4processing-0.1.5/examples/create_jsonarray/create_jsonarray.pde new file mode 100644 index 000000000..810f7cb21 --- /dev/null +++ b/distribution/json4processing-0.1.5/examples/create_jsonarray/create_jsonarray.pde @@ -0,0 +1,23 @@ +/* + * JSON 4 Processing + * Basic example 2: Creating a JSON Array + * + * Good for sending a large set of primitive values, like sensor readings. + */ + +import org.json.*; + +void setup(){ + + // 1. Initialize the Array + JSONArray myJsonArray = new JSONArray(); + + // 2. Add some content to the array + myJsonArray.put( 4 ); + myJsonArray.put( 2 ); + + println( myJsonArray ); +} + +void draw(){ +} diff --git a/distribution/json4processing-0.1.5/examples/create_jsonarray_of_objects/create_jsonarray_of_objects.pde b/distribution/json4processing-0.1.5/examples/create_jsonarray_of_objects/create_jsonarray_of_objects.pde new file mode 100644 index 000000000..e8713b47b --- /dev/null +++ b/distribution/json4processing-0.1.5/examples/create_jsonarray_of_objects/create_jsonarray_of_objects.pde @@ -0,0 +1,31 @@ +/* + * JSON 4 Processing + * Basic example 3: Creating a JSON Array of JSON Objects. + * + * Good for sending multiple complex values, such as database tables. + */ + +import org.json.*; + +void setup(){ + + // 1. Initialize the Array + JSONArray myJsonUsers = new JSONArray(); + + // 2. Create the first object & add to array + JSONObject firstUser = new JSONObject(); + firstUser.put( "name", "Andreas" ); + firstUser.put( "age", 32 ); + myJsonUsers.put( firstUser ); + + // 3. Create the second object + JSONObject secondUser = new JSONObject(); + secondUser.put( "name", "Maria" ); + secondUser.put( "age", 28 ); + myJsonUsers.put( secondUser ); + + println( myJsonUsers ); +} + +void draw(){ +} diff --git a/distribution/json4processing-0.1.5/examples/create_jsonobject/create_jsonobject.pde b/distribution/json4processing-0.1.5/examples/create_jsonobject/create_jsonobject.pde new file mode 100644 index 000000000..5e54214a7 --- /dev/null +++ b/distribution/json4processing-0.1.5/examples/create_jsonobject/create_jsonobject.pde @@ -0,0 +1,22 @@ +/* + * JSON 4 Processing + * Basic example 1: Creating a JSON Object + * + * Good for sending values that has a specific meaning (complex values) + */ + +import org.json.*; + +void setup(){ + + // 1. Initialize the object + JSONObject myJsonObject = new JSONObject(); + + // 2. Add some content to the object + myJsonObject.put( "myIntegerValue", 7 ); + + println( myJsonObject ); +} + +void draw(){ +} diff --git a/distribution/json4processing-0.1.5/examples/create_jsonobject_from_httpheader/create_jsonobject_from_httpheader.pde b/distribution/json4processing-0.1.5/examples/create_jsonobject_from_httpheader/create_jsonobject_from_httpheader.pde new file mode 100644 index 000000000..82aaa7e18 --- /dev/null +++ b/distribution/json4processing-0.1.5/examples/create_jsonobject_from_httpheader/create_jsonobject_from_httpheader.pde @@ -0,0 +1,57 @@ +/* + * JSON 4 Processing + * Basic example 5: Parsing the HTTP header from www.processing.org + * + * This example creates a JSONObject from the HTTP response when + * contacting a website (www.processing.org). + */ +import org.json.*; +import java.net.URL; +import java.net.URLConnection; + +URL url; +URLConnection conn; + +void setup() { + // Unfortunately there's a problem in the Processing Client implementation + // that forces us to use straight Java. + try { + url = new URL("http://www.processing.org"); + conn = url.openConnection(); + } + catch( Exception e) { + } + + // We will manually add the entire HTTP reponse to this StringBuffer + // and create the JSONObject using it. + StringBuffer sb = new StringBuffer(); + + // Construct the String object using the URLConnection. + for (int i = 0;; i++) { + String name = conn.getHeaderFieldKey(i); + String value = conn.getHeaderField(i); + if (name == null && value == null) { + break; + } + if (name == null) { + // Add the value, if there is no key-value pair. + sb.append(value).append("\n"); + } + else { + // Add the key-value pair. + sb.append(name).append(":").append(value).append("\n"); + } + } + + // Create the JSON HTTP instance + HTTP http = new HTTP(); + + // Create the JSONObject using the HTTP instance + JSONObject obj = http.toJSONObject(sb.toString()); + + // Print the JSONObject + System.out.println(obj); +} +void draw() { +} + diff --git a/distribution/json4processing-0.1.5/examples/create_jsonobject_from_string/create_jsonobject_from_string.pde b/distribution/json4processing-0.1.5/examples/create_jsonobject_from_string/create_jsonobject_from_string.pde new file mode 100644 index 000000000..94a079daa --- /dev/null +++ b/distribution/json4processing-0.1.5/examples/create_jsonobject_from_string/create_jsonobject_from_string.pde @@ -0,0 +1,20 @@ +/* + * JSON 4 Processing + * Basic example 1: Creating a JSON Object from a json string + */ + +import org.json.*; + +void setup(){ + + // 1. Get the json-string (we'll just create one...) + String jsonstring = "{\"myIntegerValue\":7}"; + + // 2. Initialize the object + JSONObject myJsonObject = new JSONObject(jsonstring); + + println( myJsonObject ); +} + +void draw(){ +} \ No newline at end of file diff --git a/distribution/json4processing-0.1.5/examples/reading_yahoo_weather/reading_yahoo_weather.pde b/distribution/json4processing-0.1.5/examples/reading_yahoo_weather/reading_yahoo_weather.pde new file mode 100644 index 000000000..2714414e2 --- /dev/null +++ b/distribution/json4processing-0.1.5/examples/reading_yahoo_weather/reading_yahoo_weather.pde @@ -0,0 +1,37 @@ +/* + * JSON 4 Processing + * Basic example 4: Reading data from the web (Yahoo weather) + * + * This example reads the Weather feed from the Yahoo API's. It's using + * the WOEID for Malmo, you can change this by finding the ID you want + * at http://developer.yahoo.com/weather/ + */ + +import org.json.*; + +void setup() { + // Accessing the weather service + String BASE_URL = "http://weather.yahooapis.com/forecastjson?w="; + String WOEID = "898091"; + + // Get the JSON formatted response + String response = loadStrings( BASE_URL + WOEID )[0]; + + // Make sure we got a response. + if ( response != null ) { + // Initialize the JSONObject for the response + JSONObject root = new JSONObject( response ); + + // Get the "condition" JSONObject + JSONObject condition = root.getJSONObject("condition"); + + // Get the "temperature" value from the condition object + int temperature = condition.getInt("temperature"); + + // Print the temperature + println( temperature ); + } +} + +void draw() { +} diff --git a/distribution/json4processing-0.1.5/examples/write_jsonarray_of_objects/write_jsonarray_of_objects.pde b/distribution/json4processing-0.1.5/examples/write_jsonarray_of_objects/write_jsonarray_of_objects.pde new file mode 100644 index 000000000..23de7bec0 --- /dev/null +++ b/distribution/json4processing-0.1.5/examples/write_jsonarray_of_objects/write_jsonarray_of_objects.pde @@ -0,0 +1,56 @@ +/* + * JSON 4 Processing + * Basic example 7: Creating a JSON Array of JSON Objects and saving it to a file. + * + * Good for saving multiple complex values, such as database tables. + * + * Author: Andreas Göransson, output additions: Tim Pulver + */ + +import org.json.*; +import java.io.File; + +void setup(){ + + // Object creation like in example 3 + // ================================================= + + // 1. Initialize the Array + JSONArray myJsonUsers = new JSONArray(); + + // 2. Create the first object & add to array + JSONObject firstUser = new JSONObject(); + firstUser.put( "name", "Andreas" ); + firstUser.put( "age", 32 ); + myJsonUsers.put( firstUser ); + + // 3. Create the second object + JSONObject secondUser = new JSONObject(); + secondUser.put( "name", "Maria" ); + secondUser.put( "age", 28 ); + myJsonUsers.put( secondUser ); + + // Writing the JSON Array / Object to a file + // ================================================= + + // will store the JSON Array in the file json_output.txt within the data directory + File file = new File(dataPath("") + File.separator + "json_output.txt"); + // Create the data directory if it does not exist + file.getParentFile().mkdirs(); + try{ + // If the file already exists, it will be overwritten + FileWriter fstream = new FileWriter(file, false); + // Use this instead if you want to append the data to the file + //FileWriter fstream = new FileWriter(file, true); + BufferedWriter out = new BufferedWriter(fstream); + // do the actual writing + myJsonUsers.write(out); + // Close the stream + out.close(); + }catch (Exception e){ + System.err.println("Error writing the JSON file: " + e.getMessage()); + } +} + +void draw(){ +} diff --git a/distribution/json4processing-0.1.5/index.html b/distribution/json4processing-0.1.5/index.html new file mode 100644 index 000000000..94c8f584f --- /dev/null +++ b/distribution/json4processing-0.1.5/index.html @@ -0,0 +1,132 @@ + + + +json4processing + + + + + + + + + + + + + + +

+ + + + + +
+ +
+

json4processing

+

+ A library by Andreas Goransson for the programming environment processing. Last update, 11/28/2012. +

+

+ Feel free to replace this paragraph with a description of the library. Contributed libraries are developed, documented, and maintained by members of the Processing community. Further directions are included with each library. For feedback and support, please post to the Discourse. We strongly encourage all libraries to be open source, but not all of them are. +

+
+ + + +
+

Download

+

+ Download json4processing version 0.1.5 in + .zip format. +

+

Installation

+

+ Unzip and put the extracted json4processing folder into the libraries folder of your processing sketches. Reference and examples are included in the json4processing folder. +

+
+ + +
+

Keywords ?

+

Reference. Have a look at the javadoc reference here. a copy of the reference is included in the .zip as well.

+

Source. The source code of json4processing is available at github, and its repository can be browsed here.

+
+ +
+

Examples

+

Find a list of examples in the current distribution of json4processing, or have a look at them by following the links below.

+ +
+ + +
+

Tested

+

+ + Platform linux, windows + + +
Processing 1.5.1 + + +
Dependencies ? +

+
+ + + + + + + + + + + + +
+
+ + +
+ + \ No newline at end of file diff --git a/distribution/json4processing-0.1.5/reference/allclasses-frame.html b/distribution/json4processing-0.1.5/reference/allclasses-frame.html new file mode 100644 index 000000000..205e34a02 --- /dev/null +++ b/distribution/json4processing-0.1.5/reference/allclasses-frame.html @@ -0,0 +1,32 @@ + + + + + +All Classes (Javadocs: json4processing) + + + + +

All Classes

+ + + diff --git a/distribution/json4processing-0.1.5/reference/allclasses-noframe.html b/distribution/json4processing-0.1.5/reference/allclasses-noframe.html new file mode 100644 index 000000000..716f8110c --- /dev/null +++ b/distribution/json4processing-0.1.5/reference/allclasses-noframe.html @@ -0,0 +1,32 @@ + + + + + +All Classes (Javadocs: json4processing) + + + + +

All Classes

+ + + diff --git a/distribution/json4processing-0.1.5/reference/constant-values.html b/distribution/json4processing-0.1.5/reference/constant-values.html new file mode 100644 index 000000000..5648446c6 --- /dev/null +++ b/distribution/json4processing-0.1.5/reference/constant-values.html @@ -0,0 +1,141 @@ + + + + + +Constant Field Values (Javadocs: json4processing) + + + + + + + + + + +
+

Constant Field Values

+

Contents

+ +
+
+ + +

org.json.*

+
    +
  • + + + + + + + + + + + + + + +
    org.json.HTTP 
    Modifier and TypeConstant FieldValue
    + +public static final java.lang.StringCRLF"\r\n"
    +
  • +
+
+ + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.5/reference/deprecated-list.html b/distribution/json4processing-0.1.5/reference/deprecated-list.html new file mode 100644 index 000000000..b1574c5f1 --- /dev/null +++ b/distribution/json4processing-0.1.5/reference/deprecated-list.html @@ -0,0 +1,112 @@ + + + + + +Deprecated List (Javadocs: json4processing) + + + + + + + +
+ + + + + +
+ + +
+

Deprecated API

+

Contents

+
+ +
+ + + + + +
+ + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.5/reference/help-doc.html b/distribution/json4processing-0.1.5/reference/help-doc.html new file mode 100644 index 000000000..bdaab27b9 --- /dev/null +++ b/distribution/json4processing-0.1.5/reference/help-doc.html @@ -0,0 +1,209 @@ + + + + + +API Help (Javadocs: json4processing) + + + + + + + +
+ + + + + +
+ + +
+

How This API Document Is Organized

+
This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.
+
+
+
    +
  • +

    Package

    +

    Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain six categories:

    +
      +
    • Interfaces (italic)
    • +
    • Classes
    • +
    • Enums
    • +
    • Exceptions
    • +
    • Errors
    • +
    • Annotation Types
    • +
    +
  • +
  • +

    Class/Interface

    +

    Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

    +
      +
    • Class inheritance diagram
    • +
    • Direct Subclasses
    • +
    • All Known Subinterfaces
    • +
    • All Known Implementing Classes
    • +
    • Class/interface declaration
    • +
    • Class/interface description
    • +
    +
      +
    • Nested Class Summary
    • +
    • Field Summary
    • +
    • Constructor Summary
    • +
    • Method Summary
    • +
    +
      +
    • Field Detail
    • +
    • Constructor Detail
    • +
    • Method Detail
    • +
    +

    Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

    +
  • +
  • +

    Annotation Type

    +

    Each annotation type has its own separate page with the following sections:

    +
      +
    • Annotation Type declaration
    • +
    • Annotation Type description
    • +
    • Required Element Summary
    • +
    • Optional Element Summary
    • +
    • Element Detail
    • +
    +
  • +
  • +

    Enum

    +

    Each enum has its own separate page with the following sections:

    +
      +
    • Enum declaration
    • +
    • Enum description
    • +
    • Enum Constant Summary
    • +
    • Enum Constant Detail
    • +
    +
  • +
  • +

    Tree (Class Hierarchy)

    +

    There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.

    +
      +
    • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
    • +
    • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
    • +
    +
  • +
  • +

    Deprecated API

    +

    The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.

    +
  • +
  • +

    Index

    +

    The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.

    +
  • +
  • +

    Prev/Next

    +

    These links take you to the next or previous class, interface, package, or related page.

    +
  • +
  • +

    Frames/No Frames

    +

    These links show and hide the HTML frames. All pages are available with or without frames.

    +
  • +
  • +

    All Classes

    +

    The All Classes link shows all classes and interfaces except non-static nested types.

    +
  • +
  • +

    Serialized Form

    +

    Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.

    +
  • +
  • +

    Constant Field Values

    +

    The Constant Field Values page lists the static final fields and their values.

    +
  • +
+This help file applies to API documentation generated using the standard doclet.
+ +
+ + + + + +
+ + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.5/reference/index-all.html b/distribution/json4processing-0.1.5/reference/index-all.html new file mode 100644 index 000000000..fef4e768d --- /dev/null +++ b/distribution/json4processing-0.1.5/reference/index-all.html @@ -0,0 +1,1134 @@ + + + + + +Index (Javadocs: json4processing) + + + + + + + +
+ + + + + +
+ + +
A B C D E G H I J K L M N O P Q R S T U V W X  + + +

A

+
+
accumulate(String, Object) - Method in class org.json.JSONObject
+
+
Accumulate values under a key.
+
+
AMP - Static variable in class org.json.XML
+
+
The Character '&'.
+
+
APOS - Static variable in class org.json.XML
+
+
The Character '''.
+
+
append(String, Object) - Method in class org.json.JSONObject
+
+
Append values to the array under a key.
+
+
array() - Method in class org.json.JSONWriter
+
+
Begin appending a new array.
+
+
+ + + +

B

+
+
back() - Method in class org.json.JSONTokener
+
+
Back up one character.
+
+
BANG - Static variable in class org.json.XML
+
+
The Character '!'.
+
+
+ + + +

C

+
+
CDL - Class in org.json
+
+
This provides static methods to convert comma delimited text into a + JSONArray, and to covert a JSONArray into comma delimited text.
+
+
CDL() - Constructor for class org.json.CDL
+
 
+
Cookie - Class in org.json
+
+
Convert a web browser cookie specification to a JSONObject and back.
+
+
Cookie() - Constructor for class org.json.Cookie
+
 
+
CookieList - Class in org.json
+
+
Convert a web browser cookie list string to a JSONObject and back.
+
+
CookieList() - Constructor for class org.json.CookieList
+
 
+
CRLF - Static variable in class org.json.HTTP
+
+
Carriage return/line feed.
+
+
+ + + +

D

+
+
dehexchar(char) - Static method in class org.json.JSONTokener
+
+
Get the hex value of a character (base16).
+
+
doubleToString(double) - Static method in class org.json.JSONObject
+
+
Produce a string from a double.
+
+
+ + + +

E

+
+
end() - Method in class org.json.JSONTokener
+
 
+
endArray() - Method in class org.json.JSONWriter
+
+
End an array.
+
+
endObject() - Method in class org.json.JSONWriter
+
+
End an object.
+
+
entity - Static variable in class org.json.XMLTokener
+
+
The table of entity values.
+
+
EQ - Static variable in class org.json.XML
+
+
The Character '='.
+
+
escape(String) - Static method in class org.json.Cookie
+
+
Produce a copy of a string in which the characters '+', '%', '=', ';' + and control characters are replaced with "%hh".
+
+
escape(String) - Static method in class org.json.XML
+
+
Replace special characters with XML escapes:
+
+
+ + + +

G

+
+
get(int) - Method in class org.json.JSONArray
+
+
Get the object value associated with an index.
+
+
get(String) - Method in class org.json.JSONObject
+
+
Get the value object associated with a key.
+
+
getBoolean(int) - Method in class org.json.JSONArray
+
+
Get the boolean value associated with an index.
+
+
getBoolean(String) - Method in class org.json.JSONObject
+
+
Get the boolean value associated with a key.
+
+
getCause() - Method in exception org.json.JSONException
+
 
+
getDouble(int) - Method in class org.json.JSONArray
+
+
Get the double value associated with an index.
+
+
getDouble(String) - Method in class org.json.JSONObject
+
+
Get the double value associated with a key.
+
+
getInt(int) - Method in class org.json.JSONArray
+
+
Get the int value associated with an index.
+
+
getInt(String) - Method in class org.json.JSONObject
+
+
Get the int value associated with a key.
+
+
getJSONArray(int) - Method in class org.json.JSONArray
+
+
Get the JSONArray associated with an index.
+
+
getJSONArray(String) - Method in class org.json.JSONObject
+
+
Get the JSONArray value associated with a key.
+
+
getJSONObject(int) - Method in class org.json.JSONArray
+
+
Get the JSONObject associated with an index.
+
+
getJSONObject(String) - Method in class org.json.JSONObject
+
+
Get the JSONObject value associated with a key.
+
+
getLong(int) - Method in class org.json.JSONArray
+
+
Get the long value associated with an index.
+
+
getLong(String) - Method in class org.json.JSONObject
+
+
Get the long value associated with a key.
+
+
getNames(JSONObject) - Static method in class org.json.JSONObject
+
+
Get an array of field names from a JSONObject.
+
+
getNames(Object) - Static method in class org.json.JSONObject
+
+
Get an array of field names from an Object.
+
+
getString(int) - Method in class org.json.JSONArray
+
+
Get the string associated with an index.
+
+
getString(String) - Method in class org.json.JSONObject
+
+
Get the string associated with a key.
+
+
GT - Static variable in class org.json.XML
+
+
The Character '>'.
+
+
+ + + +

H

+
+
has(String) - Method in class org.json.JSONObject
+
+
Determine if the JSONObject contains a specific key.
+
+
HTTP - Class in org.json
+
+
Convert an HTTP header to a JSONObject and back.
+
+
HTTP() - Constructor for class org.json.HTTP
+
 
+
HTTPTokener - Class in org.json
+
+
The HTTPTokener extends the JSONTokener to provide additional methods + for the parsing of HTTP headers.
+
+
HTTPTokener(String) - Constructor for class org.json.HTTPTokener
+
+
Construct an HTTPTokener from a string.
+
+
+ + + +

I

+
+
increment(String) - Method in class org.json.JSONObject
+
+
Increment a property of a JSONObject.
+
+
isNull(int) - Method in class org.json.JSONArray
+
+
Determine if the value is null.
+
+
isNull(String) - Method in class org.json.JSONObject
+
+
Determine if the value associated with the key is null or if there is no + value.
+
+
+ + + +

J

+
+
join(String) - Method in class org.json.JSONArray
+
+
Make a string from the contents of this JSONArray.
+
+
JSONArray - Class in org.json
+
+
A JSONArray is an ordered sequence of values.
+
+
JSONArray() - Constructor for class org.json.JSONArray
+
+
Construct an empty JSONArray.
+
+
JSONArray(JSONTokener) - Constructor for class org.json.JSONArray
+
+
Construct a JSONArray from a JSONTokener.
+
+
JSONArray(String) - Constructor for class org.json.JSONArray
+
+
Construct a JSONArray from a source JSON text.
+
+
JSONArray(Collection) - Constructor for class org.json.JSONArray
+
+
Construct a JSONArray from a Collection.
+
+
JSONArray(Object) - Constructor for class org.json.JSONArray
+
+
Construct a JSONArray from an array
+
+
JSONException - Exception in org.json
+
+
The JSONException is thrown by the JSON.org classes when things are amiss.
+
+
JSONException(String) - Constructor for exception org.json.JSONException
+
+
Constructs a JSONException with an explanatory message.
+
+
JSONException(Throwable) - Constructor for exception org.json.JSONException
+
 
+
JSONML - Class in org.json
+
+
This provides static methods to convert an XML text into a JSONArray or + JSONObject, and to covert a JSONArray or JSONObject into an XML text using + the JsonML transform.
+
+
JSONML() - Constructor for class org.json.JSONML
+
 
+
JSONObject - Class in org.json
+
+
A JSONObject is an unordered collection of name/value pairs.
+
+
JSONObject() - Constructor for class org.json.JSONObject
+
+
Construct an empty JSONObject.
+
+
JSONObject(JSONObject, String[]) - Constructor for class org.json.JSONObject
+
+
Construct a JSONObject from a subset of another JSONObject.
+
+
JSONObject(JSONTokener) - Constructor for class org.json.JSONObject
+
+
Construct a JSONObject from a JSONTokener.
+
+
JSONObject(Map) - Constructor for class org.json.JSONObject
+
+
Construct a JSONObject from a Map.
+
+
JSONObject(Object) - Constructor for class org.json.JSONObject
+
+
Construct a JSONObject from an Object using bean getters.
+
+
JSONObject(Object, String[]) - Constructor for class org.json.JSONObject
+
+
Construct a JSONObject from an Object, using reflection to find the + public members.
+
+
JSONObject(String) - Constructor for class org.json.JSONObject
+
+
Construct a JSONObject from a source JSON text string.
+
+
JSONObject(String, Locale) - Constructor for class org.json.JSONObject
+
+
Construct a JSONObject from a ResourceBundle.
+
+
JSONString - Interface in org.json
+
+
The JSONString interface allows a toJSONString() + method so that a class can change the behavior of + JSONObject.toString(), JSONArray.toString(), + and JSONWriter.value(Object).
+
+
JSONStringer - Class in org.json
+
+
JSONStringer provides a quick and convenient way of producing JSON text.
+
+
JSONStringer() - Constructor for class org.json.JSONStringer
+
+
Make a fresh JSONStringer.
+
+
JSONTokener - Class in org.json
+
+
A JSONTokener takes a source string and extracts characters and tokens from + it.
+
+
JSONTokener(Reader) - Constructor for class org.json.JSONTokener
+
+
Construct a JSONTokener from a Reader.
+
+
JSONTokener(InputStream) - Constructor for class org.json.JSONTokener
+
+
Construct a JSONTokener from an InputStream.
+
+
JSONTokener(String) - Constructor for class org.json.JSONTokener
+
+
Construct a JSONTokener from a string.
+
+
JSONWriter - Class in org.json
+
+
JSONWriter provides a quick and convenient way of producing JSON text.
+
+
JSONWriter(Writer) - Constructor for class org.json.JSONWriter
+
+
Make a fresh JSONWriter.
+
+
+ + + +

K

+
+
key(String) - Method in class org.json.JSONWriter
+
+
Append a key.
+
+
keys() - Method in class org.json.JSONObject
+
+
Get an enumeration of the keys of the JSONObject.
+
+
+ + + +

L

+
+
length() - Method in class org.json.JSONArray
+
+
Get the number of elements in the JSONArray, included nulls.
+
+
length() - Method in class org.json.JSONObject
+
+
Get the number of keys stored in the JSONObject.
+
+
LT - Static variable in class org.json.XML
+
+
The Character '<'.
+
+
+ + + +

M

+
+
more() - Method in class org.json.JSONTokener
+
+
Determine if the source string still contains characters that next() + can consume.
+
+
+ + + +

N

+
+
names() - Method in class org.json.JSONObject
+
+
Produce a JSONArray containing the names of the elements of this + JSONObject.
+
+
next() - Method in class org.json.JSONTokener
+
+
Get the next character in the source string.
+
+
next(char) - Method in class org.json.JSONTokener
+
+
Consume the next character, and check that it matches a specified + character.
+
+
next(int) - Method in class org.json.JSONTokener
+
+
Get the next n characters.
+
+
nextCDATA() - Method in class org.json.XMLTokener
+
+
Get the text in the CDATA block.
+
+
nextClean() - Method in class org.json.JSONTokener
+
+
Get the next char in the string, skipping whitespace.
+
+
nextContent() - Method in class org.json.XMLTokener
+
+
Get the next XML outer token, trimming whitespace.
+
+
nextEntity(char) - Method in class org.json.XMLTokener
+
+
Return the next entity.
+
+
nextMeta() - Method in class org.json.XMLTokener
+
+
Returns the next XML meta token.
+
+
nextString(char) - Method in class org.json.JSONTokener
+
+
Return the characters up to the next close quote character.
+
+
nextTo(char) - Method in class org.json.JSONTokener
+
+
Get the text up but not including the specified character or the + end of line, whichever comes first.
+
+
nextTo(String) - Method in class org.json.JSONTokener
+
+
Get the text up but not including one of the specified delimiter + characters or the end of line, whichever comes first.
+
+
nextToken() - Method in class org.json.HTTPTokener
+
+
Get the next token or string.
+
+
nextToken() - Method in class org.json.XMLTokener
+
+
Get the next XML Token.
+
+
nextValue() - Method in class org.json.JSONTokener
+
+
Get the next value.
+
+
noSpace(String) - Static method in class org.json.XML
+
+
Throw an exception if the string contains whitespace.
+
+
NULL - Static variable in class org.json.JSONObject
+
+
It is sometimes more convenient and less ambiguous to have a + NULL object than to use Java's null value.
+
+
numberToString(Number) - Static method in class org.json.JSONObject
+
+
Produce a string from a Number.
+
+
+ + + +

O

+
+
object() - Method in class org.json.JSONWriter
+
+
Begin appending a new object.
+
+
opt(int) - Method in class org.json.JSONArray
+
+
Get the optional object value associated with an index.
+
+
opt(String) - Method in class org.json.JSONObject
+
+
Get an optional value associated with a key.
+
+
optBoolean(int) - Method in class org.json.JSONArray
+
+
Get the optional boolean value associated with an index.
+
+
optBoolean(int, boolean) - Method in class org.json.JSONArray
+
+
Get the optional boolean value associated with an index.
+
+
optBoolean(String) - Method in class org.json.JSONObject
+
+
Get an optional boolean associated with a key.
+
+
optBoolean(String, boolean) - Method in class org.json.JSONObject
+
+
Get an optional boolean associated with a key.
+
+
optDouble(int) - Method in class org.json.JSONArray
+
+
Get the optional double value associated with an index.
+
+
optDouble(int, double) - Method in class org.json.JSONArray
+
+
Get the optional double value associated with an index.
+
+
optDouble(String) - Method in class org.json.JSONObject
+
+
Get an optional double associated with a key, or NaN if there is no such + key or if its value is not a number.
+
+
optDouble(String, double) - Method in class org.json.JSONObject
+
+
Get an optional double associated with a key, or the defaultValue if + there is no such key or if its value is not a number.
+
+
optInt(int) - Method in class org.json.JSONArray
+
+
Get the optional int value associated with an index.
+
+
optInt(int, int) - Method in class org.json.JSONArray
+
+
Get the optional int value associated with an index.
+
+
optInt(String) - Method in class org.json.JSONObject
+
+
Get an optional int value associated with a key, or zero if there is no + such key or if the value is not a number.
+
+
optInt(String, int) - Method in class org.json.JSONObject
+
+
Get an optional int value associated with a key, or the default if there + is no such key or if the value is not a number.
+
+
optJSONArray(int) - Method in class org.json.JSONArray
+
+
Get the optional JSONArray associated with an index.
+
+
optJSONArray(String) - Method in class org.json.JSONObject
+
+
Get an optional JSONArray associated with a key.
+
+
optJSONObject(int) - Method in class org.json.JSONArray
+
+
Get the optional JSONObject associated with an index.
+
+
optJSONObject(String) - Method in class org.json.JSONObject
+
+
Get an optional JSONObject associated with a key.
+
+
optLong(int) - Method in class org.json.JSONArray
+
+
Get the optional long value associated with an index.
+
+
optLong(int, long) - Method in class org.json.JSONArray
+
+
Get the optional long value associated with an index.
+
+
optLong(String) - Method in class org.json.JSONObject
+
+
Get an optional long value associated with a key, or zero if there is no + such key or if the value is not a number.
+
+
optLong(String, long) - Method in class org.json.JSONObject
+
+
Get an optional long value associated with a key, or the default if there + is no such key or if the value is not a number.
+
+
optString(int) - Method in class org.json.JSONArray
+
+
Get the optional string value associated with an index.
+
+
optString(int, String) - Method in class org.json.JSONArray
+
+
Get the optional string associated with an index.
+
+
optString(String) - Method in class org.json.JSONObject
+
+
Get an optional string associated with a key.
+
+
optString(String, String) - Method in class org.json.JSONObject
+
+
Get an optional string associated with a key.
+
+
org.json - package org.json
+
 
+
+ + + +

P

+
+
put(boolean) - Method in class org.json.JSONArray
+
+
Append a boolean value.
+
+
put(Collection) - Method in class org.json.JSONArray
+
+
Put a value in the JSONArray, where the value will be a + JSONArray which is produced from a Collection.
+
+
put(double) - Method in class org.json.JSONArray
+
+
Append a double value.
+
+
put(int) - Method in class org.json.JSONArray
+
+
Append an int value.
+
+
put(long) - Method in class org.json.JSONArray
+
+
Append an long value.
+
+
put(Map) - Method in class org.json.JSONArray
+
+
Put a value in the JSONArray, where the value will be a + JSONObject which is produced from a Map.
+
+
put(Object) - Method in class org.json.JSONArray
+
+
Append an object value.
+
+
put(int, boolean) - Method in class org.json.JSONArray
+
+
Put or replace a boolean value in the JSONArray.
+
+
put(int, Collection) - Method in class org.json.JSONArray
+
+
Put a value in the JSONArray, where the value will be a + JSONArray which is produced from a Collection.
+
+
put(int, double) - Method in class org.json.JSONArray
+
+
Put or replace a double value.
+
+
put(int, int) - Method in class org.json.JSONArray
+
+
Put or replace an int value.
+
+
put(int, long) - Method in class org.json.JSONArray
+
+
Put or replace a long value.
+
+
put(int, Map) - Method in class org.json.JSONArray
+
+
Put a value in the JSONArray, where the value will be a + JSONObject that is produced from a Map.
+
+
put(int, Object) - Method in class org.json.JSONArray
+
+
Put or replace an object value in the JSONArray.
+
+
put(String, boolean) - Method in class org.json.JSONObject
+
+
Put a key/boolean pair in the JSONObject.
+
+
put(String, Collection) - Method in class org.json.JSONObject
+
+
Put a key/value pair in the JSONObject, where the value will be a + JSONArray which is produced from a Collection.
+
+
put(String, double) - Method in class org.json.JSONObject
+
+
Put a key/double pair in the JSONObject.
+
+
put(String, int) - Method in class org.json.JSONObject
+
+
Put a key/int pair in the JSONObject.
+
+
put(String, long) - Method in class org.json.JSONObject
+
+
Put a key/long pair in the JSONObject.
+
+
put(String, Map) - Method in class org.json.JSONObject
+
+
Put a key/value pair in the JSONObject, where the value will be a + JSONObject which is produced from a Map.
+
+
put(String, Object) - Method in class org.json.JSONObject
+
+
Put a key/value pair in the JSONObject.
+
+
putOnce(String, Object) - Method in class org.json.JSONObject
+
+
Put a key/value pair in the JSONObject, but only if the key and the value + are both non-null, and only if there is not already a member with that + name.
+
+
putOpt(String, Object) - Method in class org.json.JSONObject
+
+
Put a key/value pair in the JSONObject, but only if the key and the value + are both non-null.
+
+
+ + + +

Q

+
+
QUEST - Static variable in class org.json.XML
+
+
The Character '?'.
+
+
QUOT - Static variable in class org.json.XML
+
+
The Character '"'.
+
+
quote(String) - Static method in class org.json.JSONObject
+
+
Produce a string in double quotes with backslash sequences in all the + right places.
+
+
+ + + +

R

+
+
remove(int) - Method in class org.json.JSONArray
+
+
Remove an index and close the hole.
+
+
remove(String) - Method in class org.json.JSONObject
+
+
Remove a name and its value, if present.
+
+
rowToJSONArray(JSONTokener) - Static method in class org.json.CDL
+
+
Produce a JSONArray of strings from a row of comma delimited values.
+
+
rowToJSONObject(JSONArray, JSONTokener) - Static method in class org.json.CDL
+
+
Produce a JSONObject from a row of comma delimited text, using a + parallel JSONArray of strings to provides the names of the elements.
+
+
rowToString(JSONArray) - Static method in class org.json.CDL
+
+
Produce a comma delimited text row from a JSONArray.
+
+
+ + + +

S

+
+
skipPast(String) - Method in class org.json.XMLTokener
+
+
Skip characters until past the requested string.
+
+
skipTo(char) - Method in class org.json.JSONTokener
+
+
Skip characters until the next character is the requested character.
+
+
SLASH - Static variable in class org.json.XML
+
+
The Character '/'.
+
+
stringToValue(String) - Static method in class org.json.JSONObject
+
+
Try to convert a string into a number, boolean, or null.
+
+
stringToValue(String) - Static method in class org.json.XML
+
+
Try to convert a string into a number, boolean, or null.
+
+
syntaxError(String) - Method in class org.json.JSONTokener
+
+
Make a JSONException to signal a syntax error.
+
+
+ + + +

T

+
+
testValidity(Object) - Static method in class org.json.JSONObject
+
+
Throw an exception if the object is a NaN or infinite number.
+
+
toJSONArray(String) - Static method in class org.json.CDL
+
+
Produce a JSONArray of JSONObjects from a comma delimited text string, + using the first row as a source of names.
+
+
toJSONArray(JSONTokener) - Static method in class org.json.CDL
+
+
Produce a JSONArray of JSONObjects from a comma delimited text string, + using the first row as a source of names.
+
+
toJSONArray(JSONArray, String) - Static method in class org.json.CDL
+
+
Produce a JSONArray of JSONObjects from a comma delimited text string + using a supplied JSONArray as the source of element names.
+
+
toJSONArray(JSONArray, JSONTokener) - Static method in class org.json.CDL
+
+
Produce a JSONArray of JSONObjects from a comma delimited text string + using a supplied JSONArray as the source of element names.
+
+
toJSONArray(String) - Static method in class org.json.JSONML
+
+
Convert a well-formed (but not necessarily valid) XML string into a + JSONArray using the JsonML transform.
+
+
toJSONArray(XMLTokener) - Static method in class org.json.JSONML
+
+
Convert a well-formed (but not necessarily valid) XML string into a + JSONArray using the JsonML transform.
+
+
toJSONArray(JSONArray) - Method in class org.json.JSONObject
+
+
Produce a JSONArray containing the values of the members of this + JSONObject.
+
+
toJSONObject(String) - Static method in class org.json.Cookie
+
+
Convert a cookie specification string into a JSONObject.
+
+
toJSONObject(String) - Static method in class org.json.CookieList
+
+
Convert a cookie list into a JSONObject.
+
+
toJSONObject(String) - Static method in class org.json.HTTP
+
+
Convert an HTTP header string into a JSONObject.
+
+
toJSONObject(JSONArray) - Method in class org.json.JSONArray
+
+
Produce a JSONObject by combining a JSONArray of names with the values + of this JSONArray.
+
+
toJSONObject(XMLTokener) - Static method in class org.json.JSONML
+
+
Convert a well-formed (but not necessarily valid) XML string into a + JSONObject using the JsonML transform.
+
+
toJSONObject(String) - Static method in class org.json.JSONML
+
+
Convert a well-formed (but not necessarily valid) XML string into a + JSONObject using the JsonML transform.
+
+
toJSONObject(String) - Static method in class org.json.XML
+
+
Convert a well-formed (but not necessarily valid) XML string into a + JSONObject.
+
+
toJSONString() - Method in interface org.json.JSONString
+
+
The toJSONString method allows a class to produce its own JSON + serialization.
+
+
toString(JSONArray) - Static method in class org.json.CDL
+
+
Produce a comma delimited text from a JSONArray of JSONObjects.
+
+
toString(JSONArray, JSONArray) - Static method in class org.json.CDL
+
+
Produce a comma delimited text from a JSONArray of JSONObjects using + a provided list of names.
+
+
toString(JSONObject) - Static method in class org.json.Cookie
+
+
Convert a JSONObject into a cookie specification string.
+
+
toString(JSONObject) - Static method in class org.json.CookieList
+
+
Convert a JSONObject into a cookie list.
+
+
toString(JSONObject) - Static method in class org.json.HTTP
+
+
Convert a JSONObject into an HTTP header.
+
+
toString() - Method in class org.json.JSONArray
+
+
Make a JSON text of this JSONArray.
+
+
toString(int) - Method in class org.json.JSONArray
+
+
Make a prettyprinted JSON text of this JSONArray.
+
+
toString(JSONArray) - Static method in class org.json.JSONML
+
+
Reverse the JSONML transformation, making an XML text from a JSONArray.
+
+
toString(JSONObject) - Static method in class org.json.JSONML
+
+
Reverse the JSONML transformation, making an XML text from a JSONObject.
+
+
toString() - Method in class org.json.JSONObject
+
+
Make a JSON text of this JSONObject.
+
+
toString(int) - Method in class org.json.JSONObject
+
+
Make a prettyprinted JSON text of this JSONObject.
+
+
toString() - Method in class org.json.JSONStringer
+
+
Return the JSON text.
+
+
toString() - Method in class org.json.JSONTokener
+
+
Make a printable string of this JSONTokener.
+
+
toString(Object) - Static method in class org.json.XML
+
+
Convert a JSONObject into a well-formed, element-normal XML string.
+
+
toString(Object, String) - Static method in class org.json.XML
+
+
Convert a JSONObject into a well-formed, element-normal XML string.
+
+
+ + + +

U

+
+
unescape(String) - Static method in class org.json.Cookie
+
+
Convert %hh sequences to single characters, and + convert plus to space.
+
+
+ + + +

V

+
+
value(boolean) - Method in class org.json.JSONWriter
+
+
Append either the value true or the value + false.
+
+
value(double) - Method in class org.json.JSONWriter
+
+
Append a double value.
+
+
value(long) - Method in class org.json.JSONWriter
+
+
Append a long value.
+
+
value(Object) - Method in class org.json.JSONWriter
+
+
Append an object value.
+
+
valueToString(Object) - Static method in class org.json.JSONObject
+
+
Make a JSON text of an Object value.
+
+
+ + + +

W

+
+
wrap(Object) - Static method in class org.json.JSONObject
+
+
Wrap an object, if necessary.
+
+
write(Writer) - Method in class org.json.JSONArray
+
+
Write the contents of the JSONArray as JSON text to a writer.
+
+
write(Writer) - Method in class org.json.JSONObject
+
+
Write the contents of the JSONObject as JSON text to a writer.
+
+
+ + + +

X

+
+
XML - Class in org.json
+
+
This provides static methods to convert an XML text into a JSONObject, + and to covert a JSONObject into an XML text.
+
+
XML() - Constructor for class org.json.XML
+
 
+
XMLTokener - Class in org.json
+
+
The XMLTokener extends the JSONTokener to provide additional methods + for the parsing of XML texts.
+
+
XMLTokener(String) - Constructor for class org.json.XMLTokener
+
+
Construct an XMLTokener from a string.
+
+
+A B C D E G H I J K L M N O P Q R S T U V W X 
+ +
+ + + + + +
+ + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.5/reference/index.html b/distribution/json4processing-0.1.5/reference/index.html new file mode 100644 index 000000000..6c8fe8aed --- /dev/null +++ b/distribution/json4processing-0.1.5/reference/index.html @@ -0,0 +1,30 @@ + + + + + +Javadocs: json4processing + + + + + + +<noscript> +<div>JavaScript is disabled on your browser.</div> +</noscript> +<h2>Frame Alert</h2> +<p>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. Link to <a href="org/json/package-summary.html">Non-frame version</a>.</p> + + + diff --git a/distribution/json4processing-0.1.5/reference/org/json/CDL.html b/distribution/json4processing-0.1.5/reference/org/json/CDL.html new file mode 100644 index 000000000..79b6719b9 --- /dev/null +++ b/distribution/json4processing-0.1.5/reference/org/json/CDL.html @@ -0,0 +1,470 @@ + + + + + +CDL (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class CDL

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.json.CDL
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class CDL
    +extends java.lang.Object
    +
    This provides static methods to convert comma delimited text into a + JSONArray, and to covert a JSONArray into comma delimited text. Comma + delimited text is a very popular format for data interchange. It is + understood by most database, spreadsheet, and organizer programs. +

    + Each row of text represents a row in a table or a data record. Each row + ends with a NEWLINE character. Each row contains one or more values. + Values are separated by commas. A value can contain any character except + for comma, unless is is wrapped in single quotes or double quotes. +

    + The first row usually contains the names of the columns. +

    + A comma delimited list can be converted into a JSONArray of JSONObjects. + The names for the elements in the JSONObjects can be taken from the names + in the first row.

    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      CDL() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      static JSONArrayrowToJSONArray(JSONTokener x) +
      Produce a JSONArray of strings from a row of comma delimited values.
      +
      static JSONObjectrowToJSONObject(JSONArray names, + JSONTokener x) +
      Produce a JSONObject from a row of comma delimited text, using a + parallel JSONArray of strings to provides the names of the elements.
      +
      static java.lang.StringrowToString(JSONArray ja) +
      Produce a comma delimited text row from a JSONArray.
      +
      static JSONArraytoJSONArray(JSONArray names, + JSONTokener x) +
      Produce a JSONArray of JSONObjects from a comma delimited text string + using a supplied JSONArray as the source of element names.
      +
      static JSONArraytoJSONArray(JSONArray names, + java.lang.String string) +
      Produce a JSONArray of JSONObjects from a comma delimited text string + using a supplied JSONArray as the source of element names.
      +
      static JSONArraytoJSONArray(JSONTokener x) +
      Produce a JSONArray of JSONObjects from a comma delimited text string, + using the first row as a source of names.
      +
      static JSONArraytoJSONArray(java.lang.String string) +
      Produce a JSONArray of JSONObjects from a comma delimited text string, + using the first row as a source of names.
      +
      static java.lang.StringtoString(JSONArray ja) +
      Produce a comma delimited text from a JSONArray of JSONObjects.
      +
      static java.lang.StringtoString(JSONArray names, + JSONArray ja) +
      Produce a comma delimited text from a JSONArray of JSONObjects using + a provided list of names.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        CDL

        +
        public CDL()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        rowToJSONArray

        +
        public static JSONArray rowToJSONArray(JSONTokener x)
        +                                throws JSONException
        +
        Produce a JSONArray of strings from a row of comma delimited values.
        +
        Parameters:
        x - A JSONTokener of the source text.
        +
        Returns:
        A JSONArray of strings.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        rowToJSONObject

        +
        public static JSONObject rowToJSONObject(JSONArray names,
        +                         JSONTokener x)
        +                                  throws JSONException
        +
        Produce a JSONObject from a row of comma delimited text, using a + parallel JSONArray of strings to provides the names of the elements.
        +
        Parameters:
        names - A JSONArray of names. This is commonly obtained from the + first row of a comma delimited text file using the rowToJSONArray + method.
        x - A JSONTokener of the source text.
        +
        Returns:
        A JSONObject combining the names and values.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        rowToString

        +
        public static java.lang.String rowToString(JSONArray ja)
        +
        Produce a comma delimited text row from a JSONArray. Values containing + the comma character will be quoted. Troublesome characters may be + removed.
        +
        Parameters:
        ja - A JSONArray of strings.
        +
        Returns:
        A string ending in NEWLINE.
        +
      • +
      + + + +
        +
      • +

        toJSONArray

        +
        public static JSONArray toJSONArray(java.lang.String string)
        +                             throws JSONException
        +
        Produce a JSONArray of JSONObjects from a comma delimited text string, + using the first row as a source of names.
        +
        Parameters:
        string - The comma delimited text.
        +
        Returns:
        A JSONArray of JSONObjects.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toJSONArray

        +
        public static JSONArray toJSONArray(JSONTokener x)
        +                             throws JSONException
        +
        Produce a JSONArray of JSONObjects from a comma delimited text string, + using the first row as a source of names.
        +
        Parameters:
        x - The JSONTokener containing the comma delimited text.
        +
        Returns:
        A JSONArray of JSONObjects.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toJSONArray

        +
        public static JSONArray toJSONArray(JSONArray names,
        +                    java.lang.String string)
        +                             throws JSONException
        +
        Produce a JSONArray of JSONObjects from a comma delimited text string + using a supplied JSONArray as the source of element names.
        +
        Parameters:
        names - A JSONArray of strings.
        string - The comma delimited text.
        +
        Returns:
        A JSONArray of JSONObjects.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toJSONArray

        +
        public static JSONArray toJSONArray(JSONArray names,
        +                    JSONTokener x)
        +                             throws JSONException
        +
        Produce a JSONArray of JSONObjects from a comma delimited text string + using a supplied JSONArray as the source of element names.
        +
        Parameters:
        names - A JSONArray of strings.
        x - A JSONTokener of the source text.
        +
        Returns:
        A JSONArray of JSONObjects.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static java.lang.String toString(JSONArray ja)
        +                                 throws JSONException
        +
        Produce a comma delimited text from a JSONArray of JSONObjects. The + first row will be a list of names obtained by inspecting the first + JSONObject.
        +
        Parameters:
        ja - A JSONArray of JSONObjects.
        +
        Returns:
        A comma delimited text.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static java.lang.String toString(JSONArray names,
        +                        JSONArray ja)
        +                                 throws JSONException
        +
        Produce a comma delimited text from a JSONArray of JSONObjects using + a provided list of names. The list of names is not included in the + output.
        +
        Parameters:
        names - A JSONArray of strings.
        ja - A JSONArray of JSONObjects.
        +
        Returns:
        A comma delimited text.
        +
        Throws:
        +
        JSONException
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.5/reference/org/json/Cookie.html b/distribution/json4processing-0.1.5/reference/org/json/Cookie.html new file mode 100644 index 000000000..545e972cb --- /dev/null +++ b/distribution/json4processing-0.1.5/reference/org/json/Cookie.html @@ -0,0 +1,347 @@ + + + + + +Cookie (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class Cookie

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.json.Cookie
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class Cookie
    +extends java.lang.Object
    +
    Convert a web browser cookie specification to a JSONObject and back. + JSON and Cookies are both notations for name/value pairs.
    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      Cookie() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      static java.lang.Stringescape(java.lang.String string) +
      Produce a copy of a string in which the characters '+', '%', '=', ';' + and control characters are replaced with "%hh".
      +
      static JSONObjecttoJSONObject(java.lang.String string) +
      Convert a cookie specification string into a JSONObject.
      +
      static java.lang.StringtoString(JSONObject jo) +
      Convert a JSONObject into a cookie specification string.
      +
      static java.lang.Stringunescape(java.lang.String string) +
      Convert %hh sequences to single characters, and + convert plus to space.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Cookie

        +
        public Cookie()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        escape

        +
        public static java.lang.String escape(java.lang.String string)
        +
        Produce a copy of a string in which the characters '+', '%', '=', ';' + and control characters are replaced with "%hh". This is a gentle form + of URL encoding, attempting to cause as little distortion to the + string as possible. The characters '=' and ';' are meta characters in + cookies. By convention, they are escaped using the URL-encoding. This is + only a convention, not a standard. Often, cookies are expected to have + encoded values. We encode '=' and ';' because we must. We encode '%' and + '+' because they are meta characters in URL encoding.
        +
        Parameters:
        string - The source string.
        +
        Returns:
        The escaped result.
        +
      • +
      + + + +
        +
      • +

        toJSONObject

        +
        public static JSONObject toJSONObject(java.lang.String string)
        +                               throws JSONException
        +
        Convert a cookie specification string into a JSONObject. The string + will contain a name value pair separated by '='. The name and the value + will be unescaped, possibly converting '+' and '%' sequences. The + cookie properties may follow, separated by ';', also represented as + name=value (except the secure property, which does not have a value). + The name will be stored under the key "name", and the value will be + stored under the key "value". This method does not do checking or + validation of the parameters. It only converts the cookie string into + a JSONObject.
        +
        Parameters:
        string - The cookie specification string.
        +
        Returns:
        A JSONObject containing "name", "value", and possibly other + members.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static java.lang.String toString(JSONObject jo)
        +                                 throws JSONException
        +
        Convert a JSONObject into a cookie specification string. The JSONObject + must contain "name" and "value" members. + If the JSONObject contains "expires", "domain", "path", or "secure" + members, they will be appended to the cookie specification string. + All other members are ignored.
        +
        Parameters:
        jo - A JSONObject
        +
        Returns:
        A cookie specification string
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        unescape

        +
        public static java.lang.String unescape(java.lang.String string)
        +
        Convert %hh sequences to single characters, and + convert plus to space.
        +
        Parameters:
        string - A string that may contain + + (plus) and + %hh sequences.
        +
        Returns:
        The unescaped string.
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.5/reference/org/json/CookieList.html b/distribution/json4processing-0.1.5/reference/org/json/CookieList.html new file mode 100644 index 000000000..8c39cd4a9 --- /dev/null +++ b/distribution/json4processing-0.1.5/reference/org/json/CookieList.html @@ -0,0 +1,295 @@ + + + + + +CookieList (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class CookieList

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.json.CookieList
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class CookieList
    +extends java.lang.Object
    +
    Convert a web browser cookie list string to a JSONObject and back.
    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      CookieList() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      static JSONObjecttoJSONObject(java.lang.String string) +
      Convert a cookie list into a JSONObject.
      +
      static java.lang.StringtoString(JSONObject jo) +
      Convert a JSONObject into a cookie list.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        CookieList

        +
        public CookieList()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        toJSONObject

        +
        public static JSONObject toJSONObject(java.lang.String string)
        +                               throws JSONException
        +
        Convert a cookie list into a JSONObject. A cookie list is a sequence + of name/value pairs. The names are separated from the values by '='. + The pairs are separated by ';'. The names and the values + will be unescaped, possibly converting '+' and '%' sequences. + + To add a cookie to a cooklist, + cookielistJSONObject.put(cookieJSONObject.getString("name"), + cookieJSONObject.getString("value"));
        +
        Parameters:
        string - A cookie list string
        +
        Returns:
        A JSONObject
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static java.lang.String toString(JSONObject jo)
        +                                 throws JSONException
        +
        Convert a JSONObject into a cookie list. A cookie list is a sequence + of name/value pairs. The names are separated from the values by '='. + The pairs are separated by ';'. The characters '%', '+', '=', and ';' + in the names and values are replaced by "%hh".
        +
        Parameters:
        jo - A JSONObject
        +
        Returns:
        A cookie list string
        +
        Throws:
        +
        JSONException
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.5/reference/org/json/HTTP.html b/distribution/json4processing-0.1.5/reference/org/json/HTTP.html new file mode 100644 index 000000000..464b02fcc --- /dev/null +++ b/distribution/json4processing-0.1.5/reference/org/json/HTTP.html @@ -0,0 +1,363 @@ + + + + + +HTTP (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class HTTP

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.json.HTTP
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class HTTP
    +extends java.lang.Object
    +
    Convert an HTTP header to a JSONObject and back.
    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Summary

      + + + + + + + + + + +
      Fields 
      Modifier and TypeField and Description
      static java.lang.StringCRLF +
      Carriage return/line feed.
      +
      +
    • +
    + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      HTTP() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      static JSONObjecttoJSONObject(java.lang.String string) +
      Convert an HTTP header string into a JSONObject.
      +
      static java.lang.StringtoString(JSONObject jo) +
      Convert a JSONObject into an HTTP header.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        CRLF

        +
        public static final java.lang.String CRLF
        +
        Carriage return/line feed.
        +
        See Also:
        Constant Field Values
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        HTTP

        +
        public HTTP()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        toJSONObject

        +
        public static JSONObject toJSONObject(java.lang.String string)
        +
        Convert an HTTP header string into a JSONObject. It can be a request + header or a response header. A request header will contain +
        {
        +    Method: "POST" (for example),
        +    "Request-URI": "/" (for example),
        +    "HTTP-Version": "HTTP/1.1" (for example)
        + }
        + A response header will contain +
        {
        +    "HTTP-Version": "HTTP/1.1" (for example),
        +    "Status-Code": "200" (for example),
        +    "Reason-Phrase": "OK" (for example)
        + }
        + In addition, the other parameters in the header will be captured, using + the HTTP field names as JSON names, so that
        +    Date: Sun, 26 May 2002 18:06:04 GMT
        +    Cookie: Q=q2=PPEAsg--; B=677gi6ouf29bn&b=2&f=s
        +    Cache-Control: no-cache
        + become +
        {...
        +    Date: "Sun, 26 May 2002 18:06:04 GMT",
        +    Cookie: "Q=q2=PPEAsg--; B=677gi6ouf29bn&b=2&f=s",
        +    "Cache-Control": "no-cache",
        + ...}
        + It does no further checking or conversion. It does not parse dates. + It does not do '%' transforms on URLs.
        +
        Parameters:
        string - An HTTP header string.
        +
        Returns:
        A JSONObject containing the elements and attributes + of the XML string.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static java.lang.String toString(JSONObject jo)
        +
        Convert a JSONObject into an HTTP header. A request header must contain +
        {
        +    Method: "POST" (for example),
        +    "Request-URI": "/" (for example),
        +    "HTTP-Version": "HTTP/1.1" (for example)
        + }
        + A response header must contain +
        {
        +    "HTTP-Version": "HTTP/1.1" (for example),
        +    "Status-Code": "200" (for example),
        +    "Reason-Phrase": "OK" (for example)
        + }
        + Any other members of the JSONObject will be output as HTTP fields. + The result will end with two CRLF pairs.
        +
        Parameters:
        jo - A JSONObject
        +
        Returns:
        An HTTP header string.
        +
        Throws:
        +
        JSONException - if the object does not contain enough + information.
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.5/reference/org/json/HTTPTokener.html b/distribution/json4processing-0.1.5/reference/org/json/HTTPTokener.html new file mode 100644 index 000000000..8d552f5e6 --- /dev/null +++ b/distribution/json4processing-0.1.5/reference/org/json/HTTPTokener.html @@ -0,0 +1,280 @@ + + + + + +HTTPTokener (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class HTTPTokener

+
+
+ +
+
    +
  • +
    +
    +
    public class HTTPTokener
    +extends JSONTokener
    +
    The HTTPTokener extends the JSONTokener to provide additional methods + for the parsing of HTTP headers.
    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        HTTPTokener

        +
        public HTTPTokener(java.lang.String string)
        +
        Construct an HTTPTokener from a string.
        +
        Parameters:
        string - A source string.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        nextToken

        +
        public java.lang.String nextToken()
        +                           throws JSONException
        +
        Get the next token or string. This is used in parsing HTTP headers.
        +
        Returns:
        A String.
        +
        Throws:
        +
        JSONException
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.5/reference/org/json/JSONArray.html b/distribution/json4processing-0.1.5/reference/org/json/JSONArray.html new file mode 100644 index 000000000..cfcf78539 --- /dev/null +++ b/distribution/json4processing-0.1.5/reference/org/json/JSONArray.html @@ -0,0 +1,1284 @@ + + + + + +JSONArray (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class JSONArray

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.json.JSONArray
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class JSONArray
    +extends java.lang.Object
    +
    A JSONArray is an ordered sequence of values. Its external text form is a + string wrapped in square brackets with commas separating the values. The + internal form is an object having get and opt + methods for accessing the values by index, and put methods for + adding or replacing values. The values can be any of these types: + Boolean, JSONArray, JSONObject, + Number, String, or the + JSONObject.NULL object. +

    + The constructor can convert a JSON text into a Java object. The + toString method converts to JSON text. +

    + A get method returns a value if one can be found, and throws an + exception if one cannot be found. An opt method returns a + default value instead of throwing an exception, and so is useful for + obtaining optional values. +

    + The generic get() and opt() methods return an + object which you can cast or query for type. There are also typed + get and opt methods that do type checking and type + coercion for you. +

    + The texts produced by the toString methods strictly conform to + JSON syntax rules. The constructors are more forgiving in the texts they will + accept: +

      +
    • An extra , (comma) may appear just + before the closing bracket.
    • +
    • The null value will be inserted when there + is , (comma) elision.
    • +
    • Strings may be quoted with ' (single + quote).
    • +
    • Strings do not need to be quoted at all if they do not begin with a quote + or single quote, and if they do not contain leading or trailing spaces, + and if they do not contain any of these characters: + { } [ ] / \ : , = ; # and if they do not look like numbers + and if they are not the reserved words true, + false, or null.
    • +
    • Values can be separated by ; (semicolon) as + well as by , (comma).
    • +
    • Numbers may have the + 0x- (hex) prefix.
    • +
    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + + + + + + + + + +
      Constructors 
      Constructor and Description
      JSONArray() +
      Construct an empty JSONArray.
      +
      JSONArray(java.util.Collection collection) +
      Construct a JSONArray from a Collection.
      +
      JSONArray(JSONTokener x) +
      Construct a JSONArray from a JSONTokener.
      +
      JSONArray(java.lang.Object array) +
      Construct a JSONArray from an array
      +
      JSONArray(java.lang.String source) +
      Construct a JSONArray from a source JSON text.
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      java.lang.Objectget(int index) +
      Get the object value associated with an index.
      +
      booleangetBoolean(int index) +
      Get the boolean value associated with an index.
      +
      doublegetDouble(int index) +
      Get the double value associated with an index.
      +
      intgetInt(int index) +
      Get the int value associated with an index.
      +
      JSONArraygetJSONArray(int index) +
      Get the JSONArray associated with an index.
      +
      JSONObjectgetJSONObject(int index) +
      Get the JSONObject associated with an index.
      +
      longgetLong(int index) +
      Get the long value associated with an index.
      +
      java.lang.StringgetString(int index) +
      Get the string associated with an index.
      +
      booleanisNull(int index) +
      Determine if the value is null.
      +
      java.lang.Stringjoin(java.lang.String separator) +
      Make a string from the contents of this JSONArray.
      +
      intlength() +
      Get the number of elements in the JSONArray, included nulls.
      +
      java.lang.Objectopt(int index) +
      Get the optional object value associated with an index.
      +
      booleanoptBoolean(int index) +
      Get the optional boolean value associated with an index.
      +
      booleanoptBoolean(int index, + boolean defaultValue) +
      Get the optional boolean value associated with an index.
      +
      doubleoptDouble(int index) +
      Get the optional double value associated with an index.
      +
      doubleoptDouble(int index, + double defaultValue) +
      Get the optional double value associated with an index.
      +
      intoptInt(int index) +
      Get the optional int value associated with an index.
      +
      intoptInt(int index, + int defaultValue) +
      Get the optional int value associated with an index.
      +
      JSONArrayoptJSONArray(int index) +
      Get the optional JSONArray associated with an index.
      +
      JSONObjectoptJSONObject(int index) +
      Get the optional JSONObject associated with an index.
      +
      longoptLong(int index) +
      Get the optional long value associated with an index.
      +
      longoptLong(int index, + long defaultValue) +
      Get the optional long value associated with an index.
      +
      java.lang.StringoptString(int index) +
      Get the optional string value associated with an index.
      +
      java.lang.StringoptString(int index, + java.lang.String defaultValue) +
      Get the optional string associated with an index.
      +
      JSONArrayput(boolean value) +
      Append a boolean value.
      +
      JSONArrayput(java.util.Collection value) +
      Put a value in the JSONArray, where the value will be a + JSONArray which is produced from a Collection.
      +
      JSONArrayput(double value) +
      Append a double value.
      +
      JSONArrayput(int value) +
      Append an int value.
      +
      JSONArrayput(int index, + boolean value) +
      Put or replace a boolean value in the JSONArray.
      +
      JSONArrayput(int index, + java.util.Collection value) +
      Put a value in the JSONArray, where the value will be a + JSONArray which is produced from a Collection.
      +
      JSONArrayput(int index, + double value) +
      Put or replace a double value.
      +
      JSONArrayput(int index, + int value) +
      Put or replace an int value.
      +
      JSONArrayput(int index, + long value) +
      Put or replace a long value.
      +
      JSONArrayput(int index, + java.util.Map value) +
      Put a value in the JSONArray, where the value will be a + JSONObject that is produced from a Map.
      +
      JSONArrayput(int index, + java.lang.Object value) +
      Put or replace an object value in the JSONArray.
      +
      JSONArrayput(long value) +
      Append an long value.
      +
      JSONArrayput(java.util.Map value) +
      Put a value in the JSONArray, where the value will be a + JSONObject which is produced from a Map.
      +
      JSONArrayput(java.lang.Object value) +
      Append an object value.
      +
      java.lang.Objectremove(int index) +
      Remove an index and close the hole.
      +
      JSONObjecttoJSONObject(JSONArray names) +
      Produce a JSONObject by combining a JSONArray of names with the values + of this JSONArray.
      +
      java.lang.StringtoString() +
      Make a JSON text of this JSONArray.
      +
      java.lang.StringtoString(int indentFactor) +
      Make a prettyprinted JSON text of this JSONArray.
      +
      java.io.Writerwrite(java.io.Writer writer) +
      Write the contents of the JSONArray as JSON text to a writer.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        JSONArray

        +
        public JSONArray()
        +
        Construct an empty JSONArray.
        +
      • +
      + + + +
        +
      • +

        JSONArray

        +
        public JSONArray(JSONTokener x)
        +          throws JSONException
        +
        Construct a JSONArray from a JSONTokener.
        +
        Parameters:
        x - A JSONTokener
        +
        Throws:
        +
        JSONException - If there is a syntax error.
        +
      • +
      + + + +
        +
      • +

        JSONArray

        +
        public JSONArray(java.lang.String source)
        +          throws JSONException
        +
        Construct a JSONArray from a source JSON text.
        +
        Parameters:
        source - A string that begins with + [ (left bracket) + and ends with ] (right bracket).
        +
        Throws:
        +
        JSONException - If there is a syntax error.
        +
      • +
      + + + +
        +
      • +

        JSONArray

        +
        public JSONArray(java.util.Collection collection)
        +
        Construct a JSONArray from a Collection.
        +
        Parameters:
        collection - A Collection.
        +
      • +
      + + + +
        +
      • +

        JSONArray

        +
        public JSONArray(java.lang.Object array)
        +
        Construct a JSONArray from an array
        +
        Throws:
        +
        JSONException - If not an array.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        get

        +
        public java.lang.Object get(int index)
        +
        Get the object value associated with an index.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        An object value.
        +
        Throws:
        +
        JSONException - If there is no value for the index.
        +
      • +
      + + + +
        +
      • +

        getBoolean

        +
        public boolean getBoolean(int index)
        +                   throws JSONException
        +
        Get the boolean value associated with an index. + The string values "true" and "false" are converted to boolean.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        The truth.
        +
        Throws:
        +
        JSONException - If there is no value for the index or if the + value is not convertible to boolean.
        +
      • +
      + + + +
        +
      • +

        getDouble

        +
        public double getDouble(int index)
        +                 throws JSONException
        +
        Get the double value associated with an index.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        The value.
        +
        Throws:
        +
        JSONException - If the key is not found or if the value cannot + be converted to a number.
        +
      • +
      + + + +
        +
      • +

        getInt

        +
        public int getInt(int index)
        +           throws JSONException
        +
        Get the int value associated with an index.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        The value.
        +
        Throws:
        +
        JSONException - If the key is not found or if the value is not a number.
        +
      • +
      + + + +
        +
      • +

        getJSONArray

        +
        public JSONArray getJSONArray(int index)
        +                       throws JSONException
        +
        Get the JSONArray associated with an index.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        A JSONArray value.
        +
        Throws:
        +
        JSONException - If there is no value for the index. or if the + value is not a JSONArray
        +
      • +
      + + + +
        +
      • +

        getJSONObject

        +
        public JSONObject getJSONObject(int index)
        +
        Get the JSONObject associated with an index.
        +
        Parameters:
        index - subscript
        +
        Returns:
        A JSONObject value.
        +
        Throws:
        +
        JSONException - If there is no value for the index or if the + value is not a JSONObject
        +
      • +
      + + + +
        +
      • +

        getLong

        +
        public long getLong(int index)
        +             throws JSONException
        +
        Get the long value associated with an index.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        The value.
        +
        Throws:
        +
        JSONException - If the key is not found or if the value cannot + be converted to a number.
        +
      • +
      + + + +
        +
      • +

        getString

        +
        public java.lang.String getString(int index)
        +                           throws JSONException
        +
        Get the string associated with an index.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        A string value.
        +
        Throws:
        +
        JSONException - If there is no string value for the index.
        +
      • +
      + + + +
        +
      • +

        isNull

        +
        public boolean isNull(int index)
        +
        Determine if the value is null.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        true if the value at the index is null, or if there is no value.
        +
      • +
      + + + +
        +
      • +

        join

        +
        public java.lang.String join(java.lang.String separator)
        +                      throws JSONException
        +
        Make a string from the contents of this JSONArray. The + separator string is inserted between each element. + Warning: This method assumes that the data structure is acyclical.
        +
        Parameters:
        separator - A string that will be inserted between the elements.
        +
        Returns:
        a string.
        +
        Throws:
        +
        JSONException - If the array contains an invalid number.
        +
      • +
      + + + +
        +
      • +

        length

        +
        public int length()
        +
        Get the number of elements in the JSONArray, included nulls.
        +
        Returns:
        The length (or size).
        +
      • +
      + + + +
        +
      • +

        opt

        +
        public java.lang.Object opt(int index)
        +
        Get the optional object value associated with an index.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        An object value, or null if there is no + object at that index.
        +
      • +
      + + + +
        +
      • +

        optBoolean

        +
        public boolean optBoolean(int index)
        +
        Get the optional boolean value associated with an index. + It returns false if there is no value at that index, + or if the value is not Boolean.TRUE or the String "true".
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        The truth.
        +
      • +
      + + + +
        +
      • +

        optBoolean

        +
        public boolean optBoolean(int index,
        +                 boolean defaultValue)
        +
        Get the optional boolean value associated with an index. + It returns the defaultValue if there is no value at that index or if + it is not a Boolean or the String "true" or "false" (case insensitive).
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        defaultValue - A boolean default.
        +
        Returns:
        The truth.
        +
      • +
      + + + +
        +
      • +

        optDouble

        +
        public double optDouble(int index)
        +
        Get the optional double value associated with an index. + NaN is returned if there is no value for the index, + or if the value is not a number and cannot be converted to a number.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        The value.
        +
      • +
      + + + +
        +
      • +

        optDouble

        +
        public double optDouble(int index,
        +               double defaultValue)
        +
        Get the optional double value associated with an index. + The defaultValue is returned if there is no value for the index, + or if the value is not a number and cannot be converted to a number.
        +
        Parameters:
        index - subscript
        defaultValue - The default value.
        +
        Returns:
        The value.
        +
      • +
      + + + +
        +
      • +

        optInt

        +
        public int optInt(int index)
        +
        Get the optional int value associated with an index. + Zero is returned if there is no value for the index, + or if the value is not a number and cannot be converted to a number.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        The value.
        +
      • +
      + + + +
        +
      • +

        optInt

        +
        public int optInt(int index,
        +         int defaultValue)
        +
        Get the optional int value associated with an index. + The defaultValue is returned if there is no value for the index, + or if the value is not a number and cannot be converted to a number.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        defaultValue - The default value.
        +
        Returns:
        The value.
        +
      • +
      + + + +
        +
      • +

        optJSONArray

        +
        public JSONArray optJSONArray(int index)
        +
        Get the optional JSONArray associated with an index.
        +
        Parameters:
        index - subscript
        +
        Returns:
        A JSONArray value, or null if the index has no value, + or if the value is not a JSONArray.
        +
      • +
      + + + +
        +
      • +

        optJSONObject

        +
        public JSONObject optJSONObject(int index)
        +
        Get the optional JSONObject associated with an index. + Null is returned if the key is not found, or null if the index has + no value, or if the value is not a JSONObject.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        A JSONObject value.
        +
      • +
      + + + +
        +
      • +

        optLong

        +
        public long optLong(int index)
        +
        Get the optional long value associated with an index. + Zero is returned if there is no value for the index, + or if the value is not a number and cannot be converted to a number.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        The value.
        +
      • +
      + + + +
        +
      • +

        optLong

        +
        public long optLong(int index,
        +           long defaultValue)
        +
        Get the optional long value associated with an index. + The defaultValue is returned if there is no value for the index, + or if the value is not a number and cannot be converted to a number.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        defaultValue - The default value.
        +
        Returns:
        The value.
        +
      • +
      + + + +
        +
      • +

        optString

        +
        public java.lang.String optString(int index)
        +
        Get the optional string value associated with an index. It returns an + empty string if there is no value at that index. If the value + is not a string and is not null, then it is coverted to a string.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        A String value.
        +
      • +
      + + + +
        +
      • +

        optString

        +
        public java.lang.String optString(int index,
        +                         java.lang.String defaultValue)
        +
        Get the optional string associated with an index. + The defaultValue is returned if the key is not found.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        defaultValue - The default value.
        +
        Returns:
        A String value.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArray put(boolean value)
        +
        Append a boolean value. This increases the array's length by one.
        +
        Parameters:
        value - A boolean value.
        +
        Returns:
        this.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArray put(java.util.Collection value)
        +
        Put a value in the JSONArray, where the value will be a + JSONArray which is produced from a Collection.
        +
        Parameters:
        value - A Collection value.
        +
        Returns:
        this.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArray put(double value)
        +
        Append a double value. This increases the array's length by one.
        +
        Parameters:
        value - A double value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - if the value is not finite.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArray put(int value)
        +
        Append an int value. This increases the array's length by one.
        +
        Parameters:
        value - An int value.
        +
        Returns:
        this.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArray put(long value)
        +
        Append an long value. This increases the array's length by one.
        +
        Parameters:
        value - A long value.
        +
        Returns:
        this.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArray put(java.util.Map value)
        +
        Put a value in the JSONArray, where the value will be a + JSONObject which is produced from a Map.
        +
        Parameters:
        value - A Map value.
        +
        Returns:
        this.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArray put(java.lang.Object value)
        +
        Append an object value. This increases the array's length by one.
        +
        Parameters:
        value - An object value. The value should be a + Boolean, Double, Integer, JSONArray, JSONObject, Long, or String, or the + JSONObject.NULL object.
        +
        Returns:
        this.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArray put(int index,
        +            boolean value)
        +
        Put or replace a boolean value in the JSONArray. If the index is greater + than the length of the JSONArray, then null elements will be added as + necessary to pad it out.
        +
        Parameters:
        index - The subscript.
        value - A boolean value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the index is negative.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArray put(int index,
        +            java.util.Collection value)
        +
        Put a value in the JSONArray, where the value will be a + JSONArray which is produced from a Collection.
        +
        Parameters:
        index - The subscript.
        value - A Collection value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the index is negative or if the value is + not finite.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArray put(int index,
        +            double value)
        +
        Put or replace a double value. If the index is greater than the length of + the JSONArray, then null elements will be added as necessary to pad + it out.
        +
        Parameters:
        index - The subscript.
        value - A double value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the index is negative or if the value is + not finite.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArray put(int index,
        +            int value)
        +
        Put or replace an int value. If the index is greater than the length of + the JSONArray, then null elements will be added as necessary to pad + it out.
        +
        Parameters:
        index - The subscript.
        value - An int value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the index is negative.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArray put(int index,
        +            long value)
        +
        Put or replace a long value. If the index is greater than the length of + the JSONArray, then null elements will be added as necessary to pad + it out.
        +
        Parameters:
        index - The subscript.
        value - A long value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the index is negative.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArray put(int index,
        +            java.util.Map value)
        +
        Put a value in the JSONArray, where the value will be a + JSONObject that is produced from a Map.
        +
        Parameters:
        index - The subscript.
        value - The Map value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the index is negative or if the the value is + an invalid number.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArray put(int index,
        +            java.lang.Object value)
        +
        Put or replace an object value in the JSONArray. If the index is greater + than the length of the JSONArray, then null elements will be added as + necessary to pad it out.
        +
        Parameters:
        index - The subscript.
        value - The value to put into the array. The value should be a + Boolean, Double, Integer, JSONArray, JSONObject, Long, or String, or the + JSONObject.NULL object.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the index is negative or if the the value is + an invalid number.
        +
      • +
      + + + +
        +
      • +

        remove

        +
        public java.lang.Object remove(int index)
        +
        Remove an index and close the hole.
        +
        Parameters:
        index - The index of the element to be removed.
        +
        Returns:
        The value that was associated with the index, + or null if there was no value.
        +
      • +
      + + + +
        +
      • +

        toJSONObject

        +
        public JSONObject toJSONObject(JSONArray names)
        +                        throws JSONException
        +
        Produce a JSONObject by combining a JSONArray of names with the values + of this JSONArray.
        +
        Parameters:
        names - A JSONArray containing a list of key strings. These will be + paired with the values.
        +
        Returns:
        A JSONObject, or null if there are no names or if this JSONArray + has no values.
        +
        Throws:
        +
        JSONException - If any of the names are null.
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public java.lang.String toString()
        +
        Make a JSON text of this JSONArray. For compactness, no + unnecessary whitespace is added. If it is not possible to produce a + syntactically correct JSON text then null will be returned instead. This + could occur if the array contains an invalid number. +

        + Warning: This method assumes that the data structure is acyclical.

        +
        +
        Overrides:
        +
        toString in class java.lang.Object
        +
        Returns:
        a printable, displayable, transmittable + representation of the array.
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public java.lang.String toString(int indentFactor)
        +                          throws JSONException
        +
        Make a prettyprinted JSON text of this JSONArray. + Warning: This method assumes that the data structure is acyclical.
        +
        Parameters:
        indentFactor - The number of spaces to add to each level of + indentation.
        +
        Returns:
        a printable, displayable, transmittable + representation of the object, beginning + with [ (left bracket) and ending + with ] (right bracket).
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        write

        +
        public java.io.Writer write(java.io.Writer writer)
        +
        Write the contents of the JSONArray as JSON text to a writer. + For compactness, no whitespace is added. +

        + Warning: This method assumes that the data structure is acyclical.

        +
        Returns:
        The writer.
        +
        Throws:
        +
        JSONException
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.5/reference/org/json/JSONException.html b/distribution/json4processing-0.1.5/reference/org/json/JSONException.html new file mode 100644 index 000000000..2993dbb00 --- /dev/null +++ b/distribution/json4processing-0.1.5/reference/org/json/JSONException.html @@ -0,0 +1,298 @@ + + + + + +JSONException (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class JSONException

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • java.lang.Throwable
    • +
    • +
        +
      • java.lang.Exception
      • +
      • +
          +
        • org.json.JSONException
        • +
        +
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.io.Serializable
    +
    +
    +
    +
    public class JSONException
    +extends java.lang.Exception
    +
    The JSONException is thrown by the JSON.org classes when things are amiss.
    +
    Author:
    +
    JSON.org
    +
    See Also:
    Serialized Form
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + +
      Constructors 
      Constructor and Description
      JSONException(java.lang.String message) +
      Constructs a JSONException with an explanatory message.
      +
      JSONException(java.lang.Throwable cause) 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      java.lang.ThrowablegetCause() 
      +
        +
      • + + +

        Methods inherited from class java.lang.Throwable

        +addSuppressed, fillInStackTrace, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
      • +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        JSONException

        +
        public JSONException(java.lang.String message)
        +
        Constructs a JSONException with an explanatory message.
        +
        Parameters:
        message - Detail about the reason for the exception.
        +
      • +
      + + + +
        +
      • +

        JSONException

        +
        public JSONException(java.lang.Throwable cause)
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getCause

        +
        public java.lang.Throwable getCause()
        +
        +
        Overrides:
        +
        getCause in class java.lang.Throwable
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.5/reference/org/json/JSONML.html b/distribution/json4processing-0.1.5/reference/org/json/JSONML.html new file mode 100644 index 000000000..0dee299c2 --- /dev/null +++ b/distribution/json4processing-0.1.5/reference/org/json/JSONML.html @@ -0,0 +1,404 @@ + + + + + +JSONML (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class JSONML

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.json.JSONML
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class JSONML
    +extends java.lang.Object
    +
    This provides static methods to convert an XML text into a JSONArray or + JSONObject, and to covert a JSONArray or JSONObject into an XML text using + the JsonML transform.
    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      JSONML() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      static JSONArraytoJSONArray(java.lang.String string) +
      Convert a well-formed (but not necessarily valid) XML string into a + JSONArray using the JsonML transform.
      +
      static JSONArraytoJSONArray(XMLTokener x) +
      Convert a well-formed (but not necessarily valid) XML string into a + JSONArray using the JsonML transform.
      +
      static JSONObjecttoJSONObject(java.lang.String string) +
      Convert a well-formed (but not necessarily valid) XML string into a + JSONObject using the JsonML transform.
      +
      static JSONObjecttoJSONObject(XMLTokener x) +
      Convert a well-formed (but not necessarily valid) XML string into a + JSONObject using the JsonML transform.
      +
      static java.lang.StringtoString(JSONArray ja) +
      Reverse the JSONML transformation, making an XML text from a JSONArray.
      +
      static java.lang.StringtoString(JSONObject jo) +
      Reverse the JSONML transformation, making an XML text from a JSONObject.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        JSONML

        +
        public JSONML()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        toJSONArray

        +
        public static JSONArray toJSONArray(java.lang.String string)
        +                             throws JSONException
        +
        Convert a well-formed (but not necessarily valid) XML string into a + JSONArray using the JsonML transform. Each XML tag is represented as + a JSONArray in which the first element is the tag name. If the tag has + attributes, then the second element will be JSONObject containing the + name/value pairs. If the tag contains children, then strings and + JSONArrays will represent the child tags. + Comments, prologs, DTDs, and <[ [ ]]> are ignored.
        +
        Parameters:
        string - The source string.
        +
        Returns:
        A JSONArray containing the structured data from the XML string.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toJSONArray

        +
        public static JSONArray toJSONArray(XMLTokener x)
        +                             throws JSONException
        +
        Convert a well-formed (but not necessarily valid) XML string into a + JSONArray using the JsonML transform. Each XML tag is represented as + a JSONArray in which the first element is the tag name. If the tag has + attributes, then the second element will be JSONObject containing the + name/value pairs. If the tag contains children, then strings and + JSONArrays will represent the child content and tags. + Comments, prologs, DTDs, and <[ [ ]]> are ignored.
        +
        Parameters:
        x - An XMLTokener.
        +
        Returns:
        A JSONArray containing the structured data from the XML string.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toJSONObject

        +
        public static JSONObject toJSONObject(XMLTokener x)
        +                               throws JSONException
        +
        Convert a well-formed (but not necessarily valid) XML string into a + JSONObject using the JsonML transform. Each XML tag is represented as + a JSONObject with a "tagName" property. If the tag has attributes, then + the attributes will be in the JSONObject as properties. If the tag + contains children, the object will have a "childNodes" property which + will be an array of strings and JsonML JSONObjects. + + Comments, prologs, DTDs, and <[ [ ]]> are ignored.
        +
        Parameters:
        x - An XMLTokener of the XML source text.
        +
        Returns:
        A JSONObject containing the structured data from the XML string.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toJSONObject

        +
        public static JSONObject toJSONObject(java.lang.String string)
        +                               throws JSONException
        +
        Convert a well-formed (but not necessarily valid) XML string into a + JSONObject using the JsonML transform. Each XML tag is represented as + a JSONObject with a "tagName" property. If the tag has attributes, then + the attributes will be in the JSONObject as properties. If the tag + contains children, the object will have a "childNodes" property which + will be an array of strings and JsonML JSONObjects. + + Comments, prologs, DTDs, and <[ [ ]]> are ignored.
        +
        Parameters:
        string - The XML source text.
        +
        Returns:
        A JSONObject containing the structured data from the XML string.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static java.lang.String toString(JSONArray ja)
        +                                 throws JSONException
        +
        Reverse the JSONML transformation, making an XML text from a JSONArray.
        +
        Parameters:
        ja - A JSONArray.
        +
        Returns:
        An XML string.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static java.lang.String toString(JSONObject jo)
        +                                 throws JSONException
        +
        Reverse the JSONML transformation, making an XML text from a JSONObject. + The JSONObject must contain a "tagName" property. If it has children, + then it must have a "childNodes" property containing an array of objects. + The other properties are attributes with string values.
        +
        Parameters:
        jo - A JSONObject.
        +
        Returns:
        An XML string.
        +
        Throws:
        +
        JSONException
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.5/reference/org/json/JSONObject.html b/distribution/json4processing-0.1.5/reference/org/json/JSONObject.html new file mode 100644 index 000000000..db9fd1a8b --- /dev/null +++ b/distribution/json4processing-0.1.5/reference/org/json/JSONObject.html @@ -0,0 +1,1626 @@ + + + + + +JSONObject (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class JSONObject

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.json.JSONObject
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class JSONObject
    +extends java.lang.Object
    +
    A JSONObject is an unordered collection of name/value pairs. Its external + form is a string wrapped in curly braces with colons between the names and + values, and commas between the values and names. The internal form is an + object having get and opt methods for accessing the + values by name, and put methods for adding or replacing values + by name. The values can be any of these types: Boolean, + JSONArray, JSONObject, Number, + String, or the JSONObject.NULL object. A JSONObject + constructor can be used to convert an external form JSON text into an + internal form whose values can be retrieved with the get and + opt methods, or to convert values into a JSON text using the + put and toString methods. A get method + returns a value if one can be found, and throws an exception if one cannot be + found. An opt method returns a default value instead of throwing + an exception, and so is useful for obtaining optional values. +

    + The generic get() and opt() methods return an + object, which you can cast or query for type. There are also typed + get and opt methods that do type checking and type + coercion for you. The opt methods differ from the get methods in that they do + not throw. Instead, they return a specified value, such as null. +

    + The put methods add or replace values in an object. For example, + +

    + myString = new JSONObject().put("JSON", "Hello, World!").toString();
    + 
    + + produces the string {"JSON": "Hello, World"}. +

    + The texts produced by the toString methods strictly conform to + the JSON syntax rules. The constructors are more forgiving in the texts they + will accept: +

      +
    • An extra , (comma) may appear just + before the closing brace.
    • +
    • Strings may be quoted with ' (single + quote).
    • +
    • Strings do not need to be quoted at all if they do not begin with a quote + or single quote, and if they do not contain leading or trailing spaces, and + if they do not contain any of these characters: + { } [ ] / \ : , = ; # and if they do not look like numbers and + if they are not the reserved words true, false, or + null.
    • +
    • Keys can be followed by = or => as well as by + :.
    • +
    • Values can be followed by ; (semicolon) as + well as by , (comma).
    • +
    • Numbers may have the 0x- (hex) prefix.
    • +
    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Summary

      + + + + + + + + + + +
      Fields 
      Modifier and TypeField and Description
      static java.lang.ObjectNULL +
      It is sometimes more convenient and less ambiguous to have a + NULL object than to use Java's null value.
      +
      +
    • +
    + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Constructors 
      Constructor and Description
      JSONObject() +
      Construct an empty JSONObject.
      +
      JSONObject(JSONObject jo, + java.lang.String[] names) +
      Construct a JSONObject from a subset of another JSONObject.
      +
      JSONObject(JSONTokener x) +
      Construct a JSONObject from a JSONTokener.
      +
      JSONObject(java.util.Map map) +
      Construct a JSONObject from a Map.
      +
      JSONObject(java.lang.Object bean) +
      Construct a JSONObject from an Object using bean getters.
      +
      JSONObject(java.lang.Object object, + java.lang.String[] names) +
      Construct a JSONObject from an Object, using reflection to find the + public members.
      +
      JSONObject(java.lang.String source) +
      Construct a JSONObject from a source JSON text string.
      +
      JSONObject(java.lang.String baseName, + java.util.Locale locale) +
      Construct a JSONObject from a ResourceBundle.
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      JSONObjectaccumulate(java.lang.String key, + java.lang.Object value) +
      Accumulate values under a key.
      +
      JSONObjectappend(java.lang.String key, + java.lang.Object value) +
      Append values to the array under a key.
      +
      static java.lang.StringdoubleToString(double d) +
      Produce a string from a double.
      +
      java.lang.Objectget(java.lang.String key) +
      Get the value object associated with a key.
      +
      booleangetBoolean(java.lang.String key) +
      Get the boolean value associated with a key.
      +
      doublegetDouble(java.lang.String key) +
      Get the double value associated with a key.
      +
      intgetInt(java.lang.String key) +
      Get the int value associated with a key.
      +
      JSONArraygetJSONArray(java.lang.String key) +
      Get the JSONArray value associated with a key.
      +
      JSONObjectgetJSONObject(java.lang.String key) +
      Get the JSONObject value associated with a key.
      +
      longgetLong(java.lang.String key) +
      Get the long value associated with a key.
      +
      static java.lang.String[]getNames(JSONObject jo) +
      Get an array of field names from a JSONObject.
      +
      static java.lang.String[]getNames(java.lang.Object object) +
      Get an array of field names from an Object.
      +
      java.lang.StringgetString(java.lang.String key) +
      Get the string associated with a key.
      +
      booleanhas(java.lang.String key) +
      Determine if the JSONObject contains a specific key.
      +
      JSONObjectincrement(java.lang.String key) +
      Increment a property of a JSONObject.
      +
      booleanisNull(java.lang.String key) +
      Determine if the value associated with the key is null or if there is no + value.
      +
      java.util.Iteratorkeys() +
      Get an enumeration of the keys of the JSONObject.
      +
      intlength() +
      Get the number of keys stored in the JSONObject.
      +
      JSONArraynames() +
      Produce a JSONArray containing the names of the elements of this + JSONObject.
      +
      static java.lang.StringnumberToString(java.lang.Number number) +
      Produce a string from a Number.
      +
      java.lang.Objectopt(java.lang.String key) +
      Get an optional value associated with a key.
      +
      booleanoptBoolean(java.lang.String key) +
      Get an optional boolean associated with a key.
      +
      booleanoptBoolean(java.lang.String key, + boolean defaultValue) +
      Get an optional boolean associated with a key.
      +
      doubleoptDouble(java.lang.String key) +
      Get an optional double associated with a key, or NaN if there is no such + key or if its value is not a number.
      +
      doubleoptDouble(java.lang.String key, + double defaultValue) +
      Get an optional double associated with a key, or the defaultValue if + there is no such key or if its value is not a number.
      +
      intoptInt(java.lang.String key) +
      Get an optional int value associated with a key, or zero if there is no + such key or if the value is not a number.
      +
      intoptInt(java.lang.String key, + int defaultValue) +
      Get an optional int value associated with a key, or the default if there + is no such key or if the value is not a number.
      +
      JSONArrayoptJSONArray(java.lang.String key) +
      Get an optional JSONArray associated with a key.
      +
      JSONObjectoptJSONObject(java.lang.String key) +
      Get an optional JSONObject associated with a key.
      +
      longoptLong(java.lang.String key) +
      Get an optional long value associated with a key, or zero if there is no + such key or if the value is not a number.
      +
      longoptLong(java.lang.String key, + long defaultValue) +
      Get an optional long value associated with a key, or the default if there + is no such key or if the value is not a number.
      +
      java.lang.StringoptString(java.lang.String key) +
      Get an optional string associated with a key.
      +
      java.lang.StringoptString(java.lang.String key, + java.lang.String defaultValue) +
      Get an optional string associated with a key.
      +
      JSONObjectput(java.lang.String key, + boolean value) +
      Put a key/boolean pair in the JSONObject.
      +
      JSONObjectput(java.lang.String key, + java.util.Collection value) +
      Put a key/value pair in the JSONObject, where the value will be a + JSONArray which is produced from a Collection.
      +
      JSONObjectput(java.lang.String key, + double value) +
      Put a key/double pair in the JSONObject.
      +
      JSONObjectput(java.lang.String key, + int value) +
      Put a key/int pair in the JSONObject.
      +
      JSONObjectput(java.lang.String key, + long value) +
      Put a key/long pair in the JSONObject.
      +
      JSONObjectput(java.lang.String key, + java.util.Map value) +
      Put a key/value pair in the JSONObject, where the value will be a + JSONObject which is produced from a Map.
      +
      JSONObjectput(java.lang.String key, + java.lang.Object value) +
      Put a key/value pair in the JSONObject.
      +
      JSONObjectputOnce(java.lang.String key, + java.lang.Object value) +
      Put a key/value pair in the JSONObject, but only if the key and the value + are both non-null, and only if there is not already a member with that + name.
      +
      JSONObjectputOpt(java.lang.String key, + java.lang.Object value) +
      Put a key/value pair in the JSONObject, but only if the key and the value + are both non-null.
      +
      static java.lang.Stringquote(java.lang.String string) +
      Produce a string in double quotes with backslash sequences in all the + right places.
      +
      java.lang.Objectremove(java.lang.String key) +
      Remove a name and its value, if present.
      +
      static java.lang.ObjectstringToValue(java.lang.String string) +
      Try to convert a string into a number, boolean, or null.
      +
      static voidtestValidity(java.lang.Object o) +
      Throw an exception if the object is a NaN or infinite number.
      +
      JSONArraytoJSONArray(JSONArray names) +
      Produce a JSONArray containing the values of the members of this + JSONObject.
      +
      java.lang.StringtoString() +
      Make a JSON text of this JSONObject.
      +
      java.lang.StringtoString(int indentFactor) +
      Make a prettyprinted JSON text of this JSONObject.
      +
      static java.lang.StringvalueToString(java.lang.Object value) +
      Make a JSON text of an Object value.
      +
      static java.lang.Objectwrap(java.lang.Object object) +
      Wrap an object, if necessary.
      +
      java.io.Writerwrite(java.io.Writer writer) +
      Write the contents of the JSONObject as JSON text to a writer.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        NULL

        +
        public static final java.lang.Object NULL
        +
        It is sometimes more convenient and less ambiguous to have a + NULL object than to use Java's null value. + JSONObject.NULL.equals(null) returns true. + JSONObject.NULL.toString() returns "null".
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        JSONObject

        +
        public JSONObject()
        +
        Construct an empty JSONObject.
        +
      • +
      + + + +
        +
      • +

        JSONObject

        +
        public JSONObject(JSONObject jo,
        +          java.lang.String[] names)
        +
        Construct a JSONObject from a subset of another JSONObject. An array of + strings is used to identify the keys that should be copied. Missing keys + are ignored.
        +
        Parameters:
        jo - A JSONObject.
        names - An array of strings.
        +
        Throws:
        +
        JSONException
        +
        JSONException - If a value is a non-finite number or if a name is + duplicated.
        +
      • +
      + + + +
        +
      • +

        JSONObject

        +
        public JSONObject(JSONTokener x)
        +
        Construct a JSONObject from a JSONTokener.
        +
        Parameters:
        x - A JSONTokener object containing the source string.
        +
        Throws:
        +
        JSONException - If there is a syntax error in the source string or a + duplicated key.
        +
      • +
      + + + +
        +
      • +

        JSONObject

        +
        public JSONObject(java.util.Map map)
        +
        Construct a JSONObject from a Map.
        +
        Parameters:
        map - A map object that can be used to initialize the contents of + the JSONObject.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        JSONObject

        +
        public JSONObject(java.lang.Object bean)
        +
        Construct a JSONObject from an Object using bean getters. It reflects on + all of the public methods of the object. For each of the methods with no + parameters and a name starting with "get" or + "is" followed by an uppercase letter, the method is invoked, + and a key and the value returned from the getter method are put into the + new JSONObject. + + The key is formed by removing the "get" or "is" + prefix. If the second remaining character is not upper case, then the + first character is converted to lower case. + + For example, if an object has a method named "getName", and + if the result of calling object.getName() is + "Larry Fine", then the JSONObject will contain + "name": "Larry Fine".
        +
        Parameters:
        bean - An object that has getter methods that should be used to make + a JSONObject.
        +
      • +
      + + + +
        +
      • +

        JSONObject

        +
        public JSONObject(java.lang.Object object,
        +          java.lang.String[] names)
        +
        Construct a JSONObject from an Object, using reflection to find the + public members. The resulting JSONObject's keys will be the strings from + the names array, and the values will be the field values associated with + those keys in the object. If a key is not found or not visible, then it + will not be copied into the new JSONObject.
        +
        Parameters:
        object - An object that has fields that should be used to make a + JSONObject.
        names - An array of strings, the names of the fields to be obtained + from the object.
        +
      • +
      + + + +
        +
      • +

        JSONObject

        +
        public JSONObject(java.lang.String source)
        +
        Construct a JSONObject from a source JSON text string. This is the most + commonly used JSONObject constructor.
        +
        Parameters:
        source - A string beginning with { (left + brace) and ending with } +  (right brace).
        +
        Throws:
        +
        JSONException - If there is a syntax error in the source string or a + duplicated key.
        +
      • +
      + + + +
        +
      • +

        JSONObject

        +
        public JSONObject(java.lang.String baseName,
        +          java.util.Locale locale)
        +
        Construct a JSONObject from a ResourceBundle.
        +
        Parameters:
        baseName - The ResourceBundle base name.
        locale - The Locale to load the ResourceBundle for.
        +
        Throws:
        +
        JSONException - If any JSONExceptions are detected.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        accumulate

        +
        public JSONObject accumulate(java.lang.String key,
        +                    java.lang.Object value)
        +
        Accumulate values under a key. It is similar to the put method except + that if there is already an object stored under the key then a JSONArray + is stored under the key to hold all of the accumulated values. If there + is already a JSONArray, then the new value is appended to it. In + contrast, the put method replaces the previous value. + + If only one value is accumulated that is not a JSONArray, then the result + will be the same as using put. But if multiple values are accumulated, + then the result will be like append.
        +
        Parameters:
        key - A key string.
        value - An object to be accumulated under the key.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the value is an invalid number or if the key is null.
        +
      • +
      + + + +
        +
      • +

        append

        +
        public JSONObject append(java.lang.String key,
        +                java.lang.Object value)
        +
        Append values to the array under a key. If the key does not exist in the + JSONObject, then the key is put in the JSONObject with its value being a + JSONArray containing the value parameter. If the key was already + associated with a JSONArray, then the value parameter is appended to it.
        +
        Parameters:
        key - A key string.
        value - An object to be accumulated under the key.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the key is null or if the current value associated with + the key is not a JSONArray.
        +
      • +
      + + + +
        +
      • +

        doubleToString

        +
        public static java.lang.String doubleToString(double d)
        +
        Produce a string from a double. The string "null" will be returned if the + number is not finite.
        +
        Parameters:
        d - A double.
        +
        Returns:
        A String.
        +
      • +
      + + + +
        +
      • +

        get

        +
        public java.lang.Object get(java.lang.String key)
        +
        Get the value object associated with a key.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        The object associated with the key.
        +
        Throws:
        +
        JSONException - if the key is not found.
        +
      • +
      + + + +
        +
      • +

        getBoolean

        +
        public boolean getBoolean(java.lang.String key)
        +
        Get the boolean value associated with a key.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        The truth. (False if it failes to find the value)
        +
        Throws:
        +
        JSONException - if the value is not a Boolean or the String "true" or + "false".
        +
      • +
      + + + +
        +
      • +

        getDouble

        +
        public double getDouble(java.lang.String key)
        +
        Get the double value associated with a key.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        The numeric value. -1 if it failes to find the value
        +
        Throws:
        +
        JSONException - if the key is not found or if the value is not a Number + object and cannot be converted to a number.
        +
      • +
      + + + +
        +
      • +

        getInt

        +
        public int getInt(java.lang.String key)
        +
        Get the int value associated with a key.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        The integer value. (-1 if it failes to get the integer)
        +
        Throws:
        +
        JSONException - if the key is not found or if the value cannot be converted + to an integer.
        +
      • +
      + + + +
        +
      • +

        getJSONArray

        +
        public JSONArray getJSONArray(java.lang.String key)
        +
        Get the JSONArray value associated with a key.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        A JSONArray which is the value. (null if failes to find the array)
        +
        Throws:
        +
        JSONException - if the key is not found or if the value is not a JSONArray.
        +
      • +
      + + + +
        +
      • +

        getJSONObject

        +
        public JSONObject getJSONObject(java.lang.String key)
        +
        Get the JSONObject value associated with a key.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        A JSONObject which is the value.
        +
        Throws:
        +
        JSONException - if the key is not found or if the value is not a JSONObject.
        +
      • +
      + + + +
        +
      • +

        getLong

        +
        public long getLong(java.lang.String key)
        +
        Get the long value associated with a key.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        The long value. (-1 if it failes)
        +
        Throws:
        +
        JSONException - if the key is not found or if the value cannot be converted + to a long.
        +
      • +
      + + + +
        +
      • +

        getNames

        +
        public static java.lang.String[] getNames(JSONObject jo)
        +
        Get an array of field names from a JSONObject.
        +
        Returns:
        An array of field names, or null if there are no names.
        +
      • +
      + + + +
        +
      • +

        getNames

        +
        public static java.lang.String[] getNames(java.lang.Object object)
        +
        Get an array of field names from an Object.
        +
        Returns:
        An array of field names, or null if there are no names.
        +
      • +
      + + + +
        +
      • +

        getString

        +
        public java.lang.String getString(java.lang.String key)
        +
        Get the string associated with a key.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        A string which is the value. (empty string if it fails)
        +
        Throws:
        +
        JSONException - if there is no string value for the key.
        +
      • +
      + + + +
        +
      • +

        has

        +
        public boolean has(java.lang.String key)
        +
        Determine if the JSONObject contains a specific key.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        true if the key exists in the JSONObject.
        +
      • +
      + + + +
        +
      • +

        increment

        +
        public JSONObject increment(java.lang.String key)
        +
        Increment a property of a JSONObject. If there is no such property, + create one with a value of 1. If there is such a property, and if it is + an Integer, Long, Double, or Float, then add one to it.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If there is already a property with this name that is not an + Integer, Long, Double, or Float.
        +
      • +
      + + + +
        +
      • +

        isNull

        +
        public boolean isNull(java.lang.String key)
        +
        Determine if the value associated with the key is null or if there is no + value.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        true if there is no value associated with the key or if the value + is the JSONObject.NULL object.
        +
      • +
      + + + +
        +
      • +

        keys

        +
        public java.util.Iterator keys()
        +
        Get an enumeration of the keys of the JSONObject.
        +
        Returns:
        An iterator of the keys.
        +
      • +
      + + + +
        +
      • +

        length

        +
        public int length()
        +
        Get the number of keys stored in the JSONObject.
        +
        Returns:
        The number of keys in the JSONObject.
        +
      • +
      + + + +
        +
      • +

        names

        +
        public JSONArray names()
        +
        Produce a JSONArray containing the names of the elements of this + JSONObject.
        +
        Returns:
        A JSONArray containing the key strings, or null if the JSONObject + is empty.
        +
      • +
      + + + +
        +
      • +

        numberToString

        +
        public static java.lang.String numberToString(java.lang.Number number)
        +
        Produce a string from a Number.
        +
        Parameters:
        number - A Number
        +
        Returns:
        A String.
        +
        Throws:
        +
        JSONException - If n is a non-finite number.
        +
      • +
      + + + +
        +
      • +

        opt

        +
        public java.lang.Object opt(java.lang.String key)
        +
        Get an optional value associated with a key.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        An object which is the value, or null if there is no value.
        +
      • +
      + + + +
        +
      • +

        optBoolean

        +
        public boolean optBoolean(java.lang.String key)
        +
        Get an optional boolean associated with a key. It returns false if there + is no such key, or if the value is not Boolean.TRUE or the String "true".
        +
        Parameters:
        key - A key string.
        +
        Returns:
        The truth.
        +
      • +
      + + + +
        +
      • +

        optBoolean

        +
        public boolean optBoolean(java.lang.String key,
        +                 boolean defaultValue)
        +
        Get an optional boolean associated with a key. It returns the + defaultValue if there is no such key, or if it is not a Boolean or the + String "true" or "false" (case insensitive).
        +
        Parameters:
        key - A key string.
        defaultValue - The default.
        +
        Returns:
        The truth.
        +
      • +
      + + + +
        +
      • +

        optDouble

        +
        public double optDouble(java.lang.String key)
        +
        Get an optional double associated with a key, or NaN if there is no such + key or if its value is not a number. If the value is a string, an attempt + will be made to evaluate it as a number.
        +
        Parameters:
        key - A string which is the key.
        +
        Returns:
        An object which is the value.
        +
      • +
      + + + +
        +
      • +

        optDouble

        +
        public double optDouble(java.lang.String key,
        +               double defaultValue)
        +
        Get an optional double associated with a key, or the defaultValue if + there is no such key or if its value is not a number. If the value is a + string, an attempt will be made to evaluate it as a number.
        +
        Parameters:
        key - A key string.
        defaultValue - The default.
        +
        Returns:
        An object which is the value.
        +
      • +
      + + + +
        +
      • +

        optInt

        +
        public int optInt(java.lang.String key)
        +
        Get an optional int value associated with a key, or zero if there is no + such key or if the value is not a number. If the value is a string, an + attempt will be made to evaluate it as a number.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        An object which is the value.
        +
      • +
      + + + +
        +
      • +

        optInt

        +
        public int optInt(java.lang.String key,
        +         int defaultValue)
        +
        Get an optional int value associated with a key, or the default if there + is no such key or if the value is not a number. If the value is a string, + an attempt will be made to evaluate it as a number.
        +
        Parameters:
        key - A key string.
        defaultValue - The default.
        +
        Returns:
        An object which is the value.
        +
      • +
      + + + +
        +
      • +

        optJSONArray

        +
        public JSONArray optJSONArray(java.lang.String key)
        +
        Get an optional JSONArray associated with a key. It returns null if there + is no such key, or if its value is not a JSONArray.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        A JSONArray which is the value.
        +
      • +
      + + + +
        +
      • +

        optJSONObject

        +
        public JSONObject optJSONObject(java.lang.String key)
        +
        Get an optional JSONObject associated with a key. It returns null if + there is no such key, or if its value is not a JSONObject.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        A JSONObject which is the value.
        +
      • +
      + + + +
        +
      • +

        optLong

        +
        public long optLong(java.lang.String key)
        +
        Get an optional long value associated with a key, or zero if there is no + such key or if the value is not a number. If the value is a string, an + attempt will be made to evaluate it as a number.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        An object which is the value.
        +
      • +
      + + + +
        +
      • +

        optLong

        +
        public long optLong(java.lang.String key,
        +           long defaultValue)
        +
        Get an optional long value associated with a key, or the default if there + is no such key or if the value is not a number. If the value is a string, + an attempt will be made to evaluate it as a number.
        +
        Parameters:
        key - A key string.
        defaultValue - The default.
        +
        Returns:
        An object which is the value.
        +
      • +
      + + + +
        +
      • +

        optString

        +
        public java.lang.String optString(java.lang.String key)
        +
        Get an optional string associated with a key. It returns an empty string + if there is no such key. If the value is not a string and is not null, + then it is converted to a string.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        A string which is the value.
        +
      • +
      + + + +
        +
      • +

        optString

        +
        public java.lang.String optString(java.lang.String key,
        +                         java.lang.String defaultValue)
        +
        Get an optional string associated with a key. It returns the defaultValue + if there is no such key.
        +
        Parameters:
        key - A key string.
        defaultValue - The default.
        +
        Returns:
        A string which is the value.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONObject put(java.lang.String key,
        +             boolean value)
        +
        Put a key/boolean pair in the JSONObject.
        +
        Parameters:
        key - A key string.
        value - A boolean which is the value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the key is null.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONObject put(java.lang.String key,
        +             java.util.Collection value)
        +
        Put a key/value pair in the JSONObject, where the value will be a + JSONArray which is produced from a Collection.
        +
        Parameters:
        key - A key string.
        value - A Collection value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONObject put(java.lang.String key,
        +             double value)
        +
        Put a key/double pair in the JSONObject.
        +
        Parameters:
        key - A key string.
        value - A double which is the value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the key is null or if the number is invalid.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONObject put(java.lang.String key,
        +             int value)
        +
        Put a key/int pair in the JSONObject.
        +
        Parameters:
        key - A key string.
        value - An int which is the value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the key is null.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONObject put(java.lang.String key,
        +             long value)
        +
        Put a key/long pair in the JSONObject.
        +
        Parameters:
        key - A key string.
        value - A long which is the value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the key is null.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONObject put(java.lang.String key,
        +             java.util.Map value)
        +
        Put a key/value pair in the JSONObject, where the value will be a + JSONObject which is produced from a Map.
        +
        Parameters:
        key - A key string.
        value - A Map value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONObject put(java.lang.String key,
        +             java.lang.Object value)
        +
        Put a key/value pair in the JSONObject. If the value is null, then the + key will be removed from the JSONObject if it is present.
        +
        Parameters:
        key - A key string.
        value - An object which is the value. It should be of one of these + types: Boolean, Double, Integer, JSONArray, JSONObject, Long, + String, or the JSONObject.NULL object.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the value is non-finite number or if the key is null.
        +
      • +
      + + + +
        +
      • +

        putOnce

        +
        public JSONObject putOnce(java.lang.String key,
        +                 java.lang.Object value)
        +
        Put a key/value pair in the JSONObject, but only if the key and the value + are both non-null, and only if there is not already a member with that + name.
        +
        Parameters:
        key -
        value -
        +
        Returns:
        his.
        +
        Throws:
        +
        JSONException - if the key is a duplicate
        +
      • +
      + + + +
        +
      • +

        putOpt

        +
        public JSONObject putOpt(java.lang.String key,
        +                java.lang.Object value)
        +
        Put a key/value pair in the JSONObject, but only if the key and the value + are both non-null.
        +
        Parameters:
        key - A key string.
        value - An object which is the value. It should be of one of these + types: Boolean, Double, Integer, JSONArray, JSONObject, Long, + String, or the JSONObject.NULL object.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the value is a non-finite number.
        +
      • +
      + + + +
        +
      • +

        quote

        +
        public static java.lang.String quote(java.lang.String string)
        +
        Produce a string in double quotes with backslash sequences in all the + right places. A backslash will be inserted within +
        Parameters:
        string - A String
        +
        Returns:
        A String correctly formatted for insertion in a JSON text.
        +
      • +
      + + + +
        +
      • +

        remove

        +
        public java.lang.Object remove(java.lang.String key)
        +
        Remove a name and its value, if present.
        +
        Parameters:
        key - The name to be removed.
        +
        Returns:
        The value that was associated with the name, or null if there was + no value.
        +
      • +
      + + + +
        +
      • +

        stringToValue

        +
        public static java.lang.Object stringToValue(java.lang.String string)
        +
        Try to convert a string into a number, boolean, or null. If the string + can't be converted, return the string.
        +
        Parameters:
        string - A String.
        +
        Returns:
        A simple JSON value.
        +
      • +
      + + + +
        +
      • +

        testValidity

        +
        public static void testValidity(java.lang.Object o)
        +                         throws JSONException
        +
        Throw an exception if the object is a NaN or infinite number.
        +
        Parameters:
        o - The object to test.
        +
        Throws:
        +
        JSONException - If o is a non-finite number.
        +
      • +
      + + + +
        +
      • +

        toJSONArray

        +
        public JSONArray toJSONArray(JSONArray names)
        +                      throws JSONException
        +
        Produce a JSONArray containing the values of the members of this + JSONObject.
        +
        Parameters:
        names - A JSONArray containing a list of key strings. This determines + the sequence of the values in the result.
        +
        Returns:
        A JSONArray of values.
        +
        Throws:
        +
        JSONException - If any of the values are non-finite numbers.
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public java.lang.String toString()
        +
        Make a JSON text of this JSONObject. For compactness, no whitespace is + added. If this would not result in a syntactically correct JSON text, + then null will be returned instead. +

        + Warning: This method assumes that the data structure is acyclical.

        +
        +
        Overrides:
        +
        toString in class java.lang.Object
        +
        Returns:
        a printable, displayable, portable, transmittable representation + of the object, beginning with { (left + brace) and ending with } (right + brace).
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public java.lang.String toString(int indentFactor)
        +
        Make a prettyprinted JSON text of this JSONObject. +

        + Warning: This method assumes that the data structure is acyclical.

        +
        Parameters:
        indentFactor - The number of spaces to add to each level of indentation.
        +
        Returns:
        a printable, displayable, portable, transmittable representation + of the object, beginning with { (left + brace) and ending with } (right + brace).
        +
        Throws:
        +
        JSONException - If the object contains an invalid number.
        +
      • +
      + + + +
        +
      • +

        valueToString

        +
        public static java.lang.String valueToString(java.lang.Object value)
        +
        Make a JSON text of an Object value. If the object has an + value.toJSONString() method, then that method will be used to produce the + JSON text. The method is required to produce a strictly conforming text. + If the object does not contain a toJSONString method (which is the most + common case), then a text will be produced by other means. If the value + is an array or Collection, then a JSONArray will be made from it and its + toJSONString method will be called. If the value is a MAP, then a + JSONObject will be made from it and its toJSONString method will be + called. Otherwise, the value's toString method will be called, and the + result will be quoted. + +

        + Warning: This method assumes that the data structure is acyclical.

        +
        Parameters:
        value - The value to be serialized.
        +
        Returns:
        a printable, displayable, transmittable representation of the + object, beginning with { (left + brace) and ending with } (right + brace).
        +
        Throws:
        +
        JSONException - If the value is or contains an invalid number.
        +
      • +
      + + + +
        +
      • +

        wrap

        +
        public static java.lang.Object wrap(java.lang.Object object)
        +
        Wrap an object, if necessary. If the object is null, return the NULL + object. If it is an array or collection, wrap it in a JSONArray. If it is + a map, wrap it in a JSONObject. If it is a standard property (Double, + String, et al) then it is already wrapped. Otherwise, if it comes from + one of the java packages, turn it into a string. And if it doesn't, try + to wrap it in a JSONObject. If the wrapping fails, then null is returned.
        +
        Parameters:
        object - The object to wrap
        +
        Returns:
        The wrapped value
        +
      • +
      + + + +
        +
      • +

        write

        +
        public java.io.Writer write(java.io.Writer writer)
        +
        Write the contents of the JSONObject as JSON text to a writer. For + compactness, no whitespace is added. +

        + Warning: This method assumes that the data structure is acyclical.

        +
        Returns:
        The writer.
        +
        Throws:
        +
        JSONException
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.5/reference/org/json/JSONString.html b/distribution/json4processing-0.1.5/reference/org/json/JSONString.html new file mode 100644 index 000000000..dc181defe --- /dev/null +++ b/distribution/json4processing-0.1.5/reference/org/json/JSONString.html @@ -0,0 +1,215 @@ + + + + + +JSONString (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Interface JSONString

+
+
+
+
    +
  • +
    +
    +
    public interface JSONString
    +
    The JSONString interface allows a toJSONString() + method so that a class can change the behavior of + JSONObject.toString(), JSONArray.toString(), + and JSONWriter.value(Object). The + toJSONString method will be used instead of the default behavior + of using the Object's toString() method and quoting the result.
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      java.lang.StringtoJSONString() +
      The toJSONString method allows a class to produce its own JSON + serialization.
      +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        toJSONString

        +
        java.lang.String toJSONString()
        +
        The toJSONString method allows a class to produce its own JSON + serialization.
        +
        Returns:
        A strictly syntactically correct JSON text.
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.5/reference/org/json/JSONStringer.html b/distribution/json4processing-0.1.5/reference/org/json/JSONStringer.html new file mode 100644 index 000000000..afdd6951c --- /dev/null +++ b/distribution/json4processing-0.1.5/reference/org/json/JSONStringer.html @@ -0,0 +1,307 @@ + + + + + +JSONStringer (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class JSONStringer

+
+
+ +
+
    +
  • +
    +
    +
    public class JSONStringer
    +extends JSONWriter
    +
    JSONStringer provides a quick and convenient way of producing JSON text. + The texts produced strictly conform to JSON syntax rules. No whitespace is + added, so the results are ready for transmission or storage. Each instance of + JSONStringer can produce one JSON text. +

    + A JSONStringer instance provides a value method for appending + values to the + text, and a key + method for adding keys before values in objects. There are array + and endArray methods that make and bound array values, and + object and endObject methods which make and bound + object values. All of these methods return the JSONWriter instance, + permitting cascade style. For example,

    + myString = new JSONStringer()
    +     .object()
    +         .key("JSON")
    +         .value("Hello, World!")
    +     .endObject()
    +     .toString();
    which produces the string
    + {"JSON":"Hello, World!"}
    +

    + The first method called must be array or object. + There are no methods for adding commas or colons. JSONStringer adds them for + you. Objects and arrays can be nested up to 20 levels deep. +

    + This can sometimes be easier than using a JSONObject to build a string.

    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      JSONStringer() +
      Make a fresh JSONStringer.
      +
      +
    • +
    + + +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        JSONStringer

        +
        public JSONStringer()
        +
        Make a fresh JSONStringer. It can be used to build one JSON text.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        toString

        +
        public java.lang.String toString()
        +
        Return the JSON text. This method is used to obtain the product of the + JSONStringer instance. It will return null if there was a + problem in the construction of the JSON text (such as the calls to + array were not properly balanced with calls to + endArray).
        +
        +
        Overrides:
        +
        toString in class java.lang.Object
        +
        Returns:
        The JSON text.
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.5/reference/org/json/JSONTokener.html b/distribution/json4processing-0.1.5/reference/org/json/JSONTokener.html new file mode 100644 index 000000000..03fcde39f --- /dev/null +++ b/distribution/json4processing-0.1.5/reference/org/json/JSONTokener.html @@ -0,0 +1,601 @@ + + + + + +JSONTokener (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class JSONTokener

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.json.JSONTokener
    • +
    +
  • +
+
+
    +
  • +
    +
    Direct Known Subclasses:
    +
    HTTPTokener, XMLTokener
    +
    +
    +
    +
    public class JSONTokener
    +extends java.lang.Object
    +
    A JSONTokener takes a source string and extracts characters and tokens from + it. It is used by the JSONObject and JSONArray constructors to parse + JSON source strings.
    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + + + +
      Constructors 
      Constructor and Description
      JSONTokener(java.io.InputStream inputStream) +
      Construct a JSONTokener from an InputStream.
      +
      JSONTokener(java.io.Reader reader) +
      Construct a JSONTokener from a Reader.
      +
      JSONTokener(java.lang.String s) +
      Construct a JSONTokener from a string.
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      voidback() +
      Back up one character.
      +
      static intdehexchar(char c) +
      Get the hex value of a character (base16).
      +
      booleanend() 
      booleanmore() +
      Determine if the source string still contains characters that next() + can consume.
      +
      charnext() +
      Get the next character in the source string.
      +
      charnext(char c) +
      Consume the next character, and check that it matches a specified + character.
      +
      java.lang.Stringnext(int n) +
      Get the next n characters.
      +
      charnextClean() +
      Get the next char in the string, skipping whitespace.
      +
      java.lang.StringnextString(char quote) +
      Return the characters up to the next close quote character.
      +
      java.lang.StringnextTo(char delimiter) +
      Get the text up but not including the specified character or the + end of line, whichever comes first.
      +
      java.lang.StringnextTo(java.lang.String delimiters) +
      Get the text up but not including one of the specified delimiter + characters or the end of line, whichever comes first.
      +
      java.lang.ObjectnextValue() +
      Get the next value.
      +
      charskipTo(char to) +
      Skip characters until the next character is the requested character.
      +
      JSONExceptionsyntaxError(java.lang.String message) +
      Make a JSONException to signal a syntax error.
      +
      java.lang.StringtoString() +
      Make a printable string of this JSONTokener.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        JSONTokener

        +
        public JSONTokener(java.io.Reader reader)
        +
        Construct a JSONTokener from a Reader.
        +
        Parameters:
        reader - A reader.
        +
      • +
      + + + +
        +
      • +

        JSONTokener

        +
        public JSONTokener(java.io.InputStream inputStream)
        +            throws JSONException
        +
        Construct a JSONTokener from an InputStream.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        JSONTokener

        +
        public JSONTokener(java.lang.String s)
        +
        Construct a JSONTokener from a string.
        +
        Parameters:
        s - A source string.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        back

        +
        public void back()
        +          throws JSONException
        +
        Back up one character. This provides a sort of lookahead capability, + so that you can test for a digit or letter before attempting to parse + the next number or identifier.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        dehexchar

        +
        public static int dehexchar(char c)
        +
        Get the hex value of a character (base16).
        +
        Parameters:
        c - A character between '0' and '9' or between 'A' and 'F' or + between 'a' and 'f'.
        +
        Returns:
        An int between 0 and 15, or -1 if c was not a hex digit.
        +
      • +
      + + + +
        +
      • +

        end

        +
        public boolean end()
        +
      • +
      + + + +
        +
      • +

        more

        +
        public boolean more()
        +             throws JSONException
        +
        Determine if the source string still contains characters that next() + can consume.
        +
        Returns:
        true if not yet at the end of the source.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        next

        +
        public char next()
        +          throws JSONException
        +
        Get the next character in the source string.
        +
        Returns:
        The next character, or 0 if past the end of the source string.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        next

        +
        public char next(char c)
        +          throws JSONException
        +
        Consume the next character, and check that it matches a specified + character.
        +
        Parameters:
        c - The character to match.
        +
        Returns:
        The character.
        +
        Throws:
        +
        JSONException - if the character does not match.
        +
      • +
      + + + +
        +
      • +

        next

        +
        public java.lang.String next(int n)
        +                      throws JSONException
        +
        Get the next n characters.
        +
        Parameters:
        n - The number of characters to take.
        +
        Returns:
        A string of n characters.
        +
        Throws:
        +
        JSONException - Substring bounds error if there are not + n characters remaining in the source string.
        +
      • +
      + + + +
        +
      • +

        nextClean

        +
        public char nextClean()
        +               throws JSONException
        +
        Get the next char in the string, skipping whitespace.
        +
        Returns:
        A character, or 0 if there are no more characters.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        nextString

        +
        public java.lang.String nextString(char quote)
        +                            throws JSONException
        +
        Return the characters up to the next close quote character. + Backslash processing is done. The formal JSON format does not + allow strings in single quotes, but an implementation is allowed to + accept them.
        +
        Parameters:
        quote - The quoting character, either + " (double quote) or + ' (single quote).
        +
        Returns:
        A String.
        +
        Throws:
        +
        JSONException - Unterminated string.
        +
      • +
      + + + +
        +
      • +

        nextTo

        +
        public java.lang.String nextTo(char delimiter)
        +                        throws JSONException
        +
        Get the text up but not including the specified character or the + end of line, whichever comes first.
        +
        Parameters:
        delimiter - A delimiter character.
        +
        Returns:
        A string.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        nextTo

        +
        public java.lang.String nextTo(java.lang.String delimiters)
        +                        throws JSONException
        +
        Get the text up but not including one of the specified delimiter + characters or the end of line, whichever comes first.
        +
        Parameters:
        delimiters - A set of delimiter characters.
        +
        Returns:
        A string, trimmed.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        nextValue

        +
        public java.lang.Object nextValue()
        +                           throws JSONException
        +
        Get the next value. The value can be a Boolean, Double, Integer, + JSONArray, JSONObject, Long, or String, or the JSONObject.NULL object.
        +
        Returns:
        An object.
        +
        Throws:
        +
        JSONException - If syntax error.
        +
      • +
      + + + +
        +
      • +

        skipTo

        +
        public char skipTo(char to)
        +            throws JSONException
        +
        Skip characters until the next character is the requested character. + If the requested character is not found, no characters are skipped.
        +
        Parameters:
        to - A character to skip to.
        +
        Returns:
        The requested character, or zero if the requested character + is not found.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        syntaxError

        +
        public JSONException syntaxError(java.lang.String message)
        +
        Make a JSONException to signal a syntax error.
        +
        Parameters:
        message - The error message.
        +
        Returns:
        A JSONException object, suitable for throwing
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public java.lang.String toString()
        +
        Make a printable string of this JSONTokener.
        +
        +
        Overrides:
        +
        toString in class java.lang.Object
        +
        Returns:
        " at {index} [character {character} line {line}]"
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.5/reference/org/json/JSONWriter.html b/distribution/json4processing-0.1.5/reference/org/json/JSONWriter.html new file mode 100644 index 000000000..04cbcfabb --- /dev/null +++ b/distribution/json4processing-0.1.5/reference/org/json/JSONWriter.html @@ -0,0 +1,474 @@ + + + + + +JSONWriter (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class JSONWriter

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.json.JSONWriter
    • +
    +
  • +
+
+
    +
  • +
    +
    Direct Known Subclasses:
    +
    JSONStringer
    +
    +
    +
    +
    public class JSONWriter
    +extends java.lang.Object
    +
    JSONWriter provides a quick and convenient way of producing JSON text. + The texts produced strictly conform to JSON syntax rules. No whitespace is + added, so the results are ready for transmission or storage. Each instance of + JSONWriter can produce one JSON text. +

    + A JSONWriter instance provides a value method for appending + values to the + text, and a key + method for adding keys before values in objects. There are array + and endArray methods that make and bound array values, and + object and endObject methods which make and bound + object values. All of these methods return the JSONWriter instance, + permitting a cascade style. For example,

    + new JSONWriter(myWriter)
    +     .object()
    +         .key("JSON")
    +         .value("Hello, World!")
    +     .endObject();
    which writes
    + {"JSON":"Hello, World!"}
    +

    + The first method called must be array or object. + There are no methods for adding commas or colons. JSONWriter adds them for + you. Objects and arrays can be nested up to 20 levels deep. +

    + This can sometimes be easier than using a JSONObject to build a string.

    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      JSONWriter(java.io.Writer w) +
      Make a fresh JSONWriter.
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      JSONWriterarray() +
      Begin appending a new array.
      +
      JSONWriterendArray() +
      End an array.
      +
      JSONWriterendObject() +
      End an object.
      +
      JSONWriterkey(java.lang.String string) +
      Append a key.
      +
      JSONWriterobject() +
      Begin appending a new object.
      +
      JSONWritervalue(boolean b) +
      Append either the value true or the value + false.
      +
      JSONWritervalue(double d) +
      Append a double value.
      +
      JSONWritervalue(long l) +
      Append a long value.
      +
      JSONWritervalue(java.lang.Object object) +
      Append an object value.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        JSONWriter

        +
        public JSONWriter(java.io.Writer w)
        +
        Make a fresh JSONWriter. It can be used to build one JSON text.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        array

        +
        public JSONWriter array()
        +                 throws JSONException
        +
        Begin appending a new array. All values until the balancing + endArray will be appended to this array. The + endArray method must be called to mark the array's end.
        +
        Returns:
        this
        +
        Throws:
        +
        JSONException - If the nesting is too deep, or if the object is + started in the wrong place (for example as a key or after the end of the + outermost array or object).
        +
      • +
      + + + +
        +
      • +

        endArray

        +
        public JSONWriter endArray()
        +                    throws JSONException
        +
        End an array. This method most be called to balance calls to + array.
        +
        Returns:
        this
        +
        Throws:
        +
        JSONException - If incorrectly nested.
        +
      • +
      + + + +
        +
      • +

        endObject

        +
        public JSONWriter endObject()
        +                     throws JSONException
        +
        End an object. This method most be called to balance calls to + object.
        +
        Returns:
        this
        +
        Throws:
        +
        JSONException - If incorrectly nested.
        +
      • +
      + + + +
        +
      • +

        key

        +
        public JSONWriter key(java.lang.String string)
        +               throws JSONException
        +
        Append a key. The key will be associated with the next value. In an + object, every value must be preceded by a key.
        +
        Parameters:
        string - A key string.
        +
        Returns:
        this
        +
        Throws:
        +
        JSONException - If the key is out of place. For example, keys + do not belong in arrays or if the key is null.
        +
      • +
      + + + +
        +
      • +

        object

        +
        public JSONWriter object()
        +                  throws JSONException
        +
        Begin appending a new object. All keys and values until the balancing + endObject will be appended to this object. The + endObject method must be called to mark the object's end.
        +
        Returns:
        this
        +
        Throws:
        +
        JSONException - If the nesting is too deep, or if the object is + started in the wrong place (for example as a key or after the end of the + outermost array or object).
        +
      • +
      + + + +
        +
      • +

        value

        +
        public JSONWriter value(boolean b)
        +                 throws JSONException
        +
        Append either the value true or the value + false.
        +
        Parameters:
        b - A boolean.
        +
        Returns:
        this
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        value

        +
        public JSONWriter value(double d)
        +                 throws JSONException
        +
        Append a double value.
        +
        Parameters:
        d - A double.
        +
        Returns:
        this
        +
        Throws:
        +
        JSONException - If the number is not finite.
        +
      • +
      + + + + + + + +
        +
      • +

        value

        +
        public JSONWriter value(java.lang.Object object)
        +                 throws JSONException
        +
        Append an object value.
        +
        Parameters:
        object - The object to append. It can be null, or a Boolean, Number, + String, JSONObject, or JSONArray, or an object that implements JSONString.
        +
        Returns:
        this
        +
        Throws:
        +
        JSONException - If the value is out of sequence.
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.5/reference/org/json/XML.html b/distribution/json4processing-0.1.5/reference/org/json/XML.html new file mode 100644 index 000000000..7c7ae0171 --- /dev/null +++ b/distribution/json4processing-0.1.5/reference/org/json/XML.html @@ -0,0 +1,552 @@ + + + + + +XML (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class XML

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.json.XML
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class XML
    +extends java.lang.Object
    +
    This provides static methods to convert an XML text into a JSONObject, + and to covert a JSONObject into an XML text.
    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeField and Description
      static java.lang.CharacterAMP +
      The Character '&'.
      +
      static java.lang.CharacterAPOS +
      The Character '''.
      +
      static java.lang.CharacterBANG +
      The Character '!'.
      +
      static java.lang.CharacterEQ +
      The Character '='.
      +
      static java.lang.CharacterGT +
      The Character '>'.
      +
      static java.lang.CharacterLT +
      The Character '<'.
      +
      static java.lang.CharacterQUEST +
      The Character '?'.
      +
      static java.lang.CharacterQUOT +
      The Character '"'.
      +
      static java.lang.CharacterSLASH +
      The Character '/'.
      +
      +
    • +
    + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      XML() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      static java.lang.Stringescape(java.lang.String string) +
      Replace special characters with XML escapes:
      +
      static voidnoSpace(java.lang.String string) +
      Throw an exception if the string contains whitespace.
      +
      static java.lang.ObjectstringToValue(java.lang.String string) +
      Try to convert a string into a number, boolean, or null.
      +
      static JSONObjecttoJSONObject(java.lang.String string) +
      Convert a well-formed (but not necessarily valid) XML string into a + JSONObject.
      +
      static java.lang.StringtoString(java.lang.Object object) +
      Convert a JSONObject into a well-formed, element-normal XML string.
      +
      static java.lang.StringtoString(java.lang.Object object, + java.lang.String tagName) +
      Convert a JSONObject into a well-formed, element-normal XML string.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        AMP

        +
        public static final java.lang.Character AMP
        +
        The Character '&'.
        +
      • +
      + + + +
        +
      • +

        APOS

        +
        public static final java.lang.Character APOS
        +
        The Character '''.
        +
      • +
      + + + +
        +
      • +

        BANG

        +
        public static final java.lang.Character BANG
        +
        The Character '!'.
        +
      • +
      + + + +
        +
      • +

        EQ

        +
        public static final java.lang.Character EQ
        +
        The Character '='.
        +
      • +
      + + + +
        +
      • +

        GT

        +
        public static final java.lang.Character GT
        +
        The Character '>'.
        +
      • +
      + + + +
        +
      • +

        LT

        +
        public static final java.lang.Character LT
        +
        The Character '<'.
        +
      • +
      + + + +
        +
      • +

        QUEST

        +
        public static final java.lang.Character QUEST
        +
        The Character '?'.
        +
      • +
      + + + +
        +
      • +

        QUOT

        +
        public static final java.lang.Character QUOT
        +
        The Character '"'.
        +
      • +
      + + + +
        +
      • +

        SLASH

        +
        public static final java.lang.Character SLASH
        +
        The Character '/'.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        XML

        +
        public XML()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        escape

        +
        public static java.lang.String escape(java.lang.String string)
        +
        Replace special characters with XML escapes: +
        + & (ampersand) is replaced by &amp;
        + < (less than) is replaced by &lt;
        + > (greater than) is replaced by &gt;
        + " (double quote) is replaced by &quot;
        + 
        +
        Parameters:
        string - The string to be escaped.
        +
        Returns:
        The escaped string.
        +
      • +
      + + + +
        +
      • +

        noSpace

        +
        public static void noSpace(java.lang.String string)
        +                    throws JSONException
        +
        Throw an exception if the string contains whitespace. + Whitespace is not allowed in tagNames and attributes.
        +
        Parameters:
        string -
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        stringToValue

        +
        public static java.lang.Object stringToValue(java.lang.String string)
        +
        Try to convert a string into a number, boolean, or null. If the string + can't be converted, return the string. This is much less ambitious than + JSONObject.stringToValue, especially because it does not attempt to + convert plus forms, octal forms, hex forms, or E forms lacking decimal + points.
        +
        Parameters:
        string - A String.
        +
        Returns:
        A simple JSON value.
        +
      • +
      + + + +
        +
      • +

        toJSONObject

        +
        public static JSONObject toJSONObject(java.lang.String string)
        +                               throws JSONException
        +
        Convert a well-formed (but not necessarily valid) XML string into a + JSONObject. Some information may be lost in this transformation + because JSON is a data format and XML is a document format. XML uses + elements, attributes, and content text, while JSON uses unordered + collections of name/value pairs and arrays of values. JSON does not + does not like to distinguish between elements and attributes. + Sequences of similar elements are represented as JSONArrays. Content + text may be placed in a "content" member. Comments, prologs, DTDs, and + <[ [ ]]> are ignored.
        +
        Parameters:
        string - The source string.
        +
        Returns:
        A JSONObject containing the structured data from the XML string.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static java.lang.String toString(java.lang.Object object)
        +                                 throws JSONException
        +
        Convert a JSONObject into a well-formed, element-normal XML string.
        +
        Parameters:
        object - A JSONObject.
        +
        Returns:
        A string.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static java.lang.String toString(java.lang.Object object,
        +                        java.lang.String tagName)
        +                                 throws JSONException
        +
        Convert a JSONObject into a well-formed, element-normal XML string.
        +
        Parameters:
        object - A JSONObject.
        tagName - The optional name of the enclosing tag.
        +
        Returns:
        A string.
        +
        Throws:
        +
        JSONException
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.5/reference/org/json/XMLTokener.html b/distribution/json4processing-0.1.5/reference/org/json/XMLTokener.html new file mode 100644 index 000000000..dae8dba4b --- /dev/null +++ b/distribution/json4processing-0.1.5/reference/org/json/XMLTokener.html @@ -0,0 +1,433 @@ + + + + + +XMLTokener (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class XMLTokener

+
+
+ +
+
    +
  • +
    +
    +
    public class XMLTokener
    +extends JSONTokener
    +
    The XMLTokener extends the JSONTokener to provide additional methods + for the parsing of XML texts.
    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Summary

      + + + + + + + + + + +
      Fields 
      Modifier and TypeField and Description
      static java.util.HashMapentity +
      The table of entity values.
      +
      +
    • +
    + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      XMLTokener(java.lang.String s) +
      Construct an XMLTokener from a string.
      +
      +
    • +
    + + +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        entity

        +
        public static final java.util.HashMap entity
        +
        The table of entity values. It initially contains Character values for + amp, apos, gt, lt, quot.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        XMLTokener

        +
        public XMLTokener(java.lang.String s)
        +
        Construct an XMLTokener from a string.
        +
        Parameters:
        s - A source string.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        nextCDATA

        +
        public java.lang.String nextCDATA()
        +                           throws JSONException
        +
        Get the text in the CDATA block.
        +
        Returns:
        The string up to the ]]>.
        +
        Throws:
        +
        JSONException - If the ]]> is not found.
        +
      • +
      + + + +
        +
      • +

        nextContent

        +
        public java.lang.Object nextContent()
        +                             throws JSONException
        +
        Get the next XML outer token, trimming whitespace. There are two kinds + of tokens: the '<' character which begins a markup tag, and the content + text between markup tags.
        +
        Returns:
        A string, or a '<' Character, or null if there is no more + source text.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        nextEntity

        +
        public java.lang.Object nextEntity(char ampersand)
        +                            throws JSONException
        +
        Return the next entity. These entities are translated to Characters: + & ' > < ".
        +
        Parameters:
        ampersand - An ampersand character.
        +
        Returns:
        A Character or an entity String if the entity is not recognized.
        +
        Throws:
        +
        JSONException - If missing ';' in XML entity.
        +
      • +
      + + + +
        +
      • +

        nextMeta

        +
        public java.lang.Object nextMeta()
        +                          throws JSONException
        +
        Returns the next XML meta token. This is used for skipping over + and structures.
        +
        Returns:
        Syntax characters (< > / = ! ?) are returned as + Character, and strings and names are returned as Boolean. We don't care + what the values actually are.
        +
        Throws:
        +
        JSONException - If a string is not properly closed or if the XML + is badly structured.
        +
      • +
      + + + +
        +
      • +

        nextToken

        +
        public java.lang.Object nextToken()
        +                           throws JSONException
        +
        Get the next XML Token. These tokens are found inside of angle + brackets. It may be one of these characters: / > = ! ? or it + may be a string wrapped in single quotes or double quotes, or it may be a + name.
        +
        Returns:
        a String or a Character.
        +
        Throws:
        +
        JSONException - If the XML is not well formed.
        +
      • +
      + + + +
        +
      • +

        skipPast

        +
        public boolean skipPast(java.lang.String to)
        +                 throws JSONException
        +
        Skip characters until past the requested string. + If it is not found, we are left at the end of the source with a result of false.
        +
        Parameters:
        to - A string to skip past.
        +
        Throws:
        +
        JSONException
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.5/reference/org/json/package-frame.html b/distribution/json4processing-0.1.5/reference/org/json/package-frame.html new file mode 100644 index 000000000..a496ebacb --- /dev/null +++ b/distribution/json4processing-0.1.5/reference/org/json/package-frame.html @@ -0,0 +1,39 @@ + + + + + +org.json (Javadocs: json4processing) + + + + +

org.json

+ + + diff --git a/distribution/json4processing-0.1.5/reference/org/json/package-summary.html b/distribution/json4processing-0.1.5/reference/org/json/package-summary.html new file mode 100644 index 000000000..69246461f --- /dev/null +++ b/distribution/json4processing-0.1.5/reference/org/json/package-summary.html @@ -0,0 +1,248 @@ + + + + + +org.json (Javadocs: json4processing) + + + + + + + + + + +
+

Package org.json

+
+
+
    +
  • + + + + + + + + + + + + +
    Interface Summary 
    InterfaceDescription
    JSONString +
    The JSONString interface allows a toJSONString() + method so that a class can change the behavior of + JSONObject.toString(), JSONArray.toString(), + and JSONWriter.value(Object).
    +
    +
  • +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    CDL +
    This provides static methods to convert comma delimited text into a + JSONArray, and to covert a JSONArray into comma delimited text.
    +
    Cookie +
    Convert a web browser cookie specification to a JSONObject and back.
    +
    CookieList +
    Convert a web browser cookie list string to a JSONObject and back.
    +
    HTTP +
    Convert an HTTP header to a JSONObject and back.
    +
    HTTPTokener +
    The HTTPTokener extends the JSONTokener to provide additional methods + for the parsing of HTTP headers.
    +
    JSONArray +
    A JSONArray is an ordered sequence of values.
    +
    JSONML +
    This provides static methods to convert an XML text into a JSONArray or + JSONObject, and to covert a JSONArray or JSONObject into an XML text using + the JsonML transform.
    +
    JSONObject +
    A JSONObject is an unordered collection of name/value pairs.
    +
    JSONStringer +
    JSONStringer provides a quick and convenient way of producing JSON text.
    +
    JSONTokener +
    A JSONTokener takes a source string and extracts characters and tokens from + it.
    +
    JSONWriter +
    JSONWriter provides a quick and convenient way of producing JSON text.
    +
    XML +
    This provides static methods to convert an XML text into a JSONObject, + and to covert a JSONObject into an XML text.
    +
    XMLTokener +
    The XMLTokener extends the JSONTokener to provide additional methods + for the parsing of XML texts.
    +
    +
  • +
  • + + + + + + + + + + + + +
    Exception Summary 
    ExceptionDescription
    JSONException +
    The JSONException is thrown by the JSON.org classes when things are amiss.
    +
    +
  • +
+
+ + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.5/reference/org/json/package-tree.html b/distribution/json4processing-0.1.5/reference/org/json/package-tree.html new file mode 100644 index 000000000..a582468af --- /dev/null +++ b/distribution/json4processing-0.1.5/reference/org/json/package-tree.html @@ -0,0 +1,152 @@ + + + + + +org.json Class Hierarchy (Javadocs: json4processing) + + + + + + + +
+ + + + + +
+ + +
+

Hierarchy For Package org.json

+
+
+

Class Hierarchy

+ +

Interface Hierarchy

+ +
+ +
+ + + + + +
+ + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.5/reference/overview-tree.html b/distribution/json4processing-0.1.5/reference/overview-tree.html new file mode 100644 index 000000000..d98b2ba7b --- /dev/null +++ b/distribution/json4processing-0.1.5/reference/overview-tree.html @@ -0,0 +1,156 @@ + + + + + +Class Hierarchy (Javadocs: json4processing) + + + + + + + +
+ + + + + +
+ + +
+

Hierarchy For All Packages

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +

Interface Hierarchy

+ +
+ +
+ + + + + +
+ + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.5/reference/package-list b/distribution/json4processing-0.1.5/reference/package-list new file mode 100644 index 000000000..ccf841806 --- /dev/null +++ b/distribution/json4processing-0.1.5/reference/package-list @@ -0,0 +1 @@ +org.json diff --git a/distribution/json4processing-0.1.5/reference/resources/background.gif b/distribution/json4processing-0.1.5/reference/resources/background.gif new file mode 100644 index 0000000000000000000000000000000000000000..f471940fde2f39ef8943a6af9569bcf986b1579b GIT binary patch literal 2313 zcmV+k3HJ6!Nk%w1VKM-40OkMy00030|NlK(aXwsfKV5S}VtGJbbVOr%L0@%CZH88Q zl{{NzcR^uxNo<2iYk@pjY)*5FJz8x~bc{)B zfk z+1T6M-s9WdW8dcJ-wO*3@9+W*5AY543-j^$^!EPz_4eHZ2#>)41`h@dc!2OAgN6$a zCS2I?;lqgx6IR4nkpTe;1RN0f=zxMq2O=q`94V5d$&e>Unta)^<;;^G3>e7yp=ZvW z6DIW3xpSvaogXF?_4%`@(V;s}NR^5J!3hrtJV@1QRV&r5S*L!zYE|rss${iFkg&!? zTN5V#)~=bmMorwgZsEpdOE)iExo+FO-8;8Kga{=HbSQCnF=E6W3?o*|ID%uwi5**> zJXy127Y9m+=HQ|PhXWi+xNwoWv}n_%Pq%(e+H~mGqhq5kv4Mo|-n~g|7!F*xZ{xv< zCpXS~dGg^IGK?4@J-T%b(XnUHFul6n<@2&4)zzyO2) z3Q8`i0+UKY*`$}e9mmp;tg*))`|PsK1|hAo%u0K$vDwm4gaSkm0j{`26k#qAKmbuhxZ#cquDR>B zD{s8+&TH-uNg$C#68QG}1HMBHfrP&L@@w$F_!itRzXdCN@V|LDAu%3!IDtq1#1UV7 z#1RxvT=B(DWbCoU5l=ia$Pp`Hgb_?Mp@hmtxZDI2N-)v#$}PXVvdm1d>@v(v`0TUJ zF)Pu89(q`zv=w^nVTIF3@3BYIPA}c`(@ZCAwbNBEt@PDUKe5CTR8aB66IE1!w%Amt zy+jpcn~k>GZpVFg+H6x{_uOksvBlq0OyT$6TyQZ37k(cOxZr|JEx1sGm<(M9gH z-~PMqyn|tT=))UN`|-FFFUA#KToK0fUOaz=7}Z~KeHhVC&%O27cTfHQ^WBU8z4p&T zp#>D|V}XShTD;Hx745Iz{`>K-Z$A|7!*Boo{mY;G21vjH8t{M!OrQc6$iN0V@PQDF zpadsK!3tXNf*8!81~qnXWuHZ)kytd=_y+ADWvw31ouV;CdZ#ya*(l7-A-C-Y^+iit8O zBy3*`Ls$|5Hn4m_^I^|C7{m7EFn|5vTk;|oywIgCc9Bb*=L+Y$)M>9GC<|HGs@6NB zHLY%03!dDf=eDRt2O6lVSFRcsuWZEwU?=z$CZ0W?#VJfdN>HG(l%oKpyiftJc|Y)xkjSJYCrQal-0PC~()T9xwF!Jf zVi1UA#3BBbh(i8r5&v#Pz!cF41KjbCc?4u2@@Q~oKLirt2TM30;y6b+zyX2`Yl9u; z`0$3;v0-YUp&7NdPT#q`cZlbij$jvbRk6R>8g*>}*b9E+WDwmpHAAxYzyT aU_pX{M6b8i>#Dq3onfZy}_nli%!Q$ZV%e&!tN2 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 YpWXKgmku8Vj|K)Vje`mzEKCg608Q#dYybcN literal 0 HcmV?d00001 diff --git a/distribution/json4processing-0.1.5/reference/serialized-form.html b/distribution/json4processing-0.1.5/reference/serialized-form.html new file mode 100644 index 000000000..c38a4d113 --- /dev/null +++ b/distribution/json4processing-0.1.5/reference/serialized-form.html @@ -0,0 +1,142 @@ + + + + + +Serialized Form (Javadocs: json4processing) + + + + + + + + + + +
+

Serialized Form

+
+
+
    +
  • +

    Package org.json

    +
      +
    • + + +

      Class org.json.JSONException extends java.lang.Exception implements Serializable

      +
      +
      serialVersionUID:
      +
      0L
      +
      +
        +
      • + + +

        Serialized Fields

        +
          +
        • +

          cause

          +
          java.lang.Throwable cause
          +
        • +
        +
      • +
      +
    • +
    +
  • +
+
+ + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.5/reference/stylesheet.css b/distribution/json4processing-0.1.5/reference/stylesheet.css new file mode 100644 index 000000000..1f18ea6a7 --- /dev/null +++ b/distribution/json4processing-0.1.5/reference/stylesheet.css @@ -0,0 +1,310 @@ +/* Javadoc style sheet */ +/* Define colors, fonts and other style attributes here to override the defaults */ +/* processingLibs style by andreas schlegel, sojamo */ + + +body { + margin : 0; + padding : 0; + padding-left : 10px; + padding-right : 8px; + background-color : #FFFFFF; + font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; + font-size : 100%; + font-size : 0.7em; + font-weight : normal; + line-height : normal; + margin-bottom:30px; +} + + + + +/* Headings */ +h1, h2, h3, h4, h5, th { + font-family :Arial, Helvetica, sans-serif; + font-size:1.2em; +} + + +p { + font-size : 1em; + width:80%; +} + +pre, code { + font-family : "Courier New", Courier, monospace; + font-size : 12px; + line-height : normal; +} + + + +table { + border:0; + margin-bottom:10px; + margin-top:10px; +} + + +tr, td { + border-top: 0px solid; + border-left: 0px solid; + padding-top:8px; + padding-bottom:8px; +} + + + +hr { + border:0; + height:1px; + padding:0; + margin:0; + margin-bottom:4px; + +} + + + +dd, th, td, font { + font-size:1.0em; + line-height:1.0em; +} + + + +dt { + margin-bottom:0px; +} + + + +dd { + margin-top:2px; + margin-bottom:4px; +} + + + +a { + text-decoration: underline; + font-weight: normal; +} + +a:hover, +a:active { + text-decoration: underline; + font-weight: normal; +} + +a:visited, +a:link:visited { + text-decoration: underline; + font-weight: normal; +} + + +img { + border: 0px solid #000000; +} + + + +/* Navigation bar fonts */ +.NavBarCell1 { + border:0; +} + +.NavBarCell1Rev { + border:0; +} + +.NavBarFont1 { + font-family: Arial, Helvetica, sans-serif; + font-size:1.1em; +} + + +.NavBarFont1 b { + font-weight:normal; +} + + + +.NavBarFont1:after, .NavBarFont1Rev:after { + font-weight:normal; + content: " \\"; +} + + +.NavBarFont1Rev { + font-family: Arial, Helvetica, sans-serif; + font-size:1.1em; +} + +.NavBarFont1Rev b { + font-family: Arial, Helvetica, sans-serif; + font-size:1.1em; + font-weight:normal; +} + +.NavBarCell2 { + font-family: Arial, Helvetica, sans-serif; +} + +.NavBarCell3 { + font-family: Arial, Helvetica, sans-serif; +} + + + +font.FrameItemFont { + font-family: Helvetica, Arial, sans-serif; + font-size:1.1em; + line-height:1.1em; +} + +font.FrameHeadingFont { + font-family: Helvetica, Arial, sans-serif; + line-height:32px; +} + +/* Font used in left-hand frame lists */ +.FrameTitleFont { + font-family: Helvetica, Arial, sans-serif +} + + +.toggleList { + padding:0; + margin:0; + margin-top:12px; +} + +.toggleList dt { + font-weight:bold; + font-size:12px; + font-family:arial,sans-serif; + padding:0px; + margin:10px 0px 10px 0px; +} + +.toggleList dt span { + font-family: monospace; + padding:0; + margin:0; +} + + +.toggleList dd { + margin:0; + padding:0; +} + +html.isjs .toggleList dd { + display: none; +} + +.toggleList pre { + padding: 4px 4px 4px 4px; +} + + + + + +/* COLORS */ + +pre, code { + color: #000000; +} + + +body { + color : #333333; + background-color :#FFFFFF; +} + + +h1, h2, h3, h4, h5, h6 { + color:#555; +} + +a, +.toggleList dt { + color: #1a7eb0; +} + +a:hover, +a:active { + color: #1a7eb0; +} + +a:visited, +a:link:visited { + color: #1a7eb0; +} + +td,tr { + border-color: #999999; +} + +hr { + color:#999999; + background:#999999; +} + + +.TableHeadingColor { + background: #dcdcdc; + color: #555; +} + + +.TableSubHeadingColor { + background: #EEEEFF +} + +.TableRowColor { + background: #FFFFFF +} + + +.NavBarCell1 { + background-color:#dcdcdc; + color:#000; +} + +.NavBarCell1 a { + color:#333; +} + + +.NavBarCell1Rev { + background-color:transparent; +} + +.NavBarFont1 { + color:#333; +} + + +.NavBarFont1Rev { + color:#fff; +} + +.NavBarCell2 { + background-color:#999; +} + +.NavBarCell2 a { + color:#fff; +} + + + +.NavBarCell3 { + background-color:#dcdcdc; +} + diff --git a/distribution/json4processing-0.1.5/stylesheet.css b/distribution/json4processing-0.1.5/stylesheet.css new file mode 100644 index 000000000..646d20063 --- /dev/null +++ b/distribution/json4processing-0.1.5/stylesheet.css @@ -0,0 +1,203 @@ +/* processingLibs style by andreas schlegel, sojamo. */ + + +* { + margin:0; + padding:0; + border:0; +} + + +body { + font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; + font-size : 100%; + font-size : 0.70em; + font-weight : normal; + line-height : normal; +} + + + +#container { + margin-left:64px; + background-color:#fff; +} + +#header { + float:left; + padding-top:24px; + padding-bottom:48px; +} + +#menu { + margin-top:16px; + float:left; + margin-bottom:64px; +} + + +#about, +#download, +#examples, +#demos, +#misc { + width:480px; + float:left; + margin-right:24px; +} + + +#resources, #info { + width:320px; + float:left; +} + + +.clear { + clear:both; +} + +#footer { + margin-top:300px; + height:20px; + margin-bottom:32px; +} + + +ul { + list-style:none; + padding:0; + margin:0; +} + + +#menu ul li, #subMenu ul li { + float:left; + padding-right:6px; +} + + + + + + +/* Headings */ + +h1 { + font-size:2em; + font-weight:normal; +} + + +h2, h3, h4, h5, th { + font-size:1.3em; + font-weight:normal; + margin-bottom:4px; +} + + + +p { + font-size:1em; + width:90%; + margin-bottom:32px; +} + + +pre, code { + font-family:"Courier New", Courier, monospace; + font-size:1em; + line-height:normal; +} + + + + +hr { + border:0; + height:1px; + margin-bottom:24px; +} + + +a { + text-decoration: underline; + font-weight: normal; +} + + +a:hover, +a:active { + text-decoration: underline; + font-weight: normal; +} + + +a:visited, +a:link:visited { + text-decoration: underline; + font-weight: normal; +} + + + +img { + border: 0px solid #000000; +} + + + + + +/* COLORS */ + + +body { + color : #333; + background-color :#fff; +} + + +#header { + background-color:#fff; + color:#333; +} + + + +h1, h2, h3, h4, h5, h6 { + color:#666; +} + + +pre, code { + color: #000000; +} + + +a,strong { + color: #333; +} + + +a:hover, +a:active { + color: #333; +} + + +a:visited, +a:link:visited { + color: #333; +} + + +#footer, #menu { + background-color:#fff; + color:#333; +} + + +#footer a, #menu a { + color:#333; +} diff --git a/resources/build.properties b/resources/build.properties index 8a623648d..4d570496d 100644 --- a/resources/build.properties +++ b/resources/build.properties @@ -97,7 +97,7 @@ project.compile=normal # set the current version of your project. -project.version=0.1.4 +project.version=0.1.5 project.copyright=(c) 2011 project.dependencies=? project.keywords=? diff --git a/src/org/json/JSONArray.java b/src/org/json/JSONArray.java index 241482877..a65c3d7d0 100644 --- a/src/org/json/JSONArray.java +++ b/src/org/json/JSONArray.java @@ -187,10 +187,11 @@ public JSONArray(Object array) /*throws JSONException*/ { * @return An object value. * @throws JSONException If there is no value for the index. */ - public Object get(int index) throws JSONException { + public Object get(int index) /*throws JSONException*/ { Object object = opt(index); if (object == null) { - throw new JSONException("JSONArray[" + index + "] not found."); + //throw new JSONException("JSONArray[" + index + "] not found."); + System.out.println("JSONArray[" + index + "] not found."); } return object; } @@ -287,12 +288,12 @@ public JSONArray getJSONArray(int index) throws JSONException { */ public JSONObject getJSONObject(int index) /*throws JSONException*/ { Object object = null; - try { +// try { object = get(index); - } catch (JSONException e) { +// } catch (JSONException e) { // e.printStackTrace(); - System.out.println( "JSONArray[" + index + "] is not a JSONObject." ); - } +// System.out.println( "JSONArray[" + index + "] is not a JSONObject." ); +// } if( object == null ) return null; From 19e49af0e8df163215ab4ab3c276a701fdc154a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20G=C3=B6ransson?= Date: Mon, 18 Mar 2013 11:47:46 +0100 Subject: [PATCH 05/26] Information regarding the core-library Added information about the introduction of the core JSON libray in Processing. --- .settings/org.eclipse.core.resources.prefs | 1 - README.md | 4 ++++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs index 65d33d245..efc68c026 100644 --- a/.settings/org.eclipse.core.resources.prefs +++ b/.settings/org.eclipse.core.resources.prefs @@ -1,3 +1,2 @@ -#Tue Feb 21 10:36:23 CET 2012 eclipse.preferences.version=1 encoding//examples/reading_yahoo_weather/reading_yahoo_weather.pde=UTF-8 diff --git a/README.md b/README.md index 61354e64f..7396075c9 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,10 @@ This library is simply a fork of the original JSON for [Java library written by Douglas Crockford](https://github.com/douglascrockford/JSON-java) for easy use inside Processing IDE. See the original README below. +# Since Processing 2.0 beta 8 + +Since the beta release (8) of Processing 2.0 (February 24) JSON is part of the core libraries; the combination of this contributed library and the core library will cause the "type is ambiguous" error, basically meaning that Processing doesnt know which of the libraries to use. The simplest way to combat this is to delete the json4processing library. + # Installation in Processing 1. Download the latest version [here](https://github.com/agoransson/JSON-processing/downloads) From 13d015427035aa4866cdad8c13dd69b5daf0a675 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20G=C3=B6ransson?= Date: Fri, 22 Mar 2013 17:46:55 +0100 Subject: [PATCH 06/26] First version singular json API --- .../download/json4processing-0.1.6.zip | Bin 0 -> 218226 bytes .../create_jsonarray/create_jsonarray.pde | 23 + .../create_jsonarray_of_objects.pde | 31 + .../create_jsonobject/create_jsonobject.pde | 22 + .../create_jsonobject_from_httpheader.pde | 57 + .../create_jsonobject_from_string.pde | 20 + .../reading_yahoo_weather.pde | 37 + .../write_jsonarray_of_objects.pde | 56 + distribution/json4processing-0.1.6/index.html | 132 + .../reference/allclasses-frame.html | 34 + .../reference/allclasses-noframe.html | 34 + .../reference/constant-values.html | 141 + .../reference/deprecated-list.html | 112 + .../reference/help-doc.html | 209 ++ .../reference/index-all.html | 1187 ++++++ .../reference/index.html | 30 + .../reference/org/json/CDL.html | 470 +++ .../reference/org/json/Cookie.html | 347 ++ .../reference/org/json/CookieList.html | 295 ++ .../reference/org/json/HTTP.html | 363 ++ .../reference/org/json/HTTPTokener.html | 280 ++ .../reference/org/json/JSON.JSONType.html | 334 ++ .../reference/org/json/JSON.html | 520 +++ .../reference/org/json/JSONArr.html | 1284 +++++++ .../reference/org/json/JSONException.html | 298 ++ .../reference/org/json/JSONML.html | 404 ++ .../reference/org/json/JSONObj.html | 1626 ++++++++ .../reference/org/json/JSONString.html | 215 ++ .../reference/org/json/JSONStringer.html | 307 ++ .../reference/org/json/JSONTokener.html | 557 +++ .../reference/org/json/JSONWriter.html | 474 +++ .../reference/org/json/XML.html | 552 +++ .../reference/org/json/XMLTokener.html | 427 +++ .../reference/org/json/package-frame.html | 44 + .../reference/org/json/package-summary.html | 270 ++ .../reference/org/json/package-tree.html | 165 + .../reference/overview-tree.html | 169 + .../reference/package-list | 1 + .../reference/resources/background.gif | Bin 0 -> 2313 bytes .../reference/resources/tab.gif | Bin 0 -> 291 bytes .../reference/resources/titlebar.gif | Bin 0 -> 10701 bytes .../reference/resources/titlebar_end.gif | Bin 0 -> 849 bytes .../reference/serialized-form.html | 142 + .../reference/stylesheet.css | 310 ++ .../json4processing-0.1.6/stylesheet.css | 203 + resources/build.properties | 248 +- src/org/json/CDL.java | 38 +- src/org/json/Cookie.java | 10 +- src/org/json/CookieList.java | 6 +- src/org/json/HTTP.java | 6 +- src/org/json/HTTPTokener.java | 2 +- src/org/json/JSON.java | 3298 +++++++++++++++++ src/org/json/{JSONArray.java => JSONArr.java} | 1886 +++++----- src/org/json/JSONML.java | 76 +- .../json/{JSONObject.java => JSONObj.java} | 204 +- src/org/json/JSONTokener.java | 749 ++-- src/org/json/JSONWriter.java | 12 +- src/org/json/XML.java | 59 +- src/org/json/XMLTokener.java | 28 +- 59 files changed, 17139 insertions(+), 1665 deletions(-) create mode 100644 distribution/json4processing-0.1.6/download/json4processing-0.1.6.zip create mode 100644 distribution/json4processing-0.1.6/examples/create_jsonarray/create_jsonarray.pde create mode 100644 distribution/json4processing-0.1.6/examples/create_jsonarray_of_objects/create_jsonarray_of_objects.pde create mode 100644 distribution/json4processing-0.1.6/examples/create_jsonobject/create_jsonobject.pde create mode 100644 distribution/json4processing-0.1.6/examples/create_jsonobject_from_httpheader/create_jsonobject_from_httpheader.pde create mode 100644 distribution/json4processing-0.1.6/examples/create_jsonobject_from_string/create_jsonobject_from_string.pde create mode 100644 distribution/json4processing-0.1.6/examples/reading_yahoo_weather/reading_yahoo_weather.pde create mode 100644 distribution/json4processing-0.1.6/examples/write_jsonarray_of_objects/write_jsonarray_of_objects.pde create mode 100644 distribution/json4processing-0.1.6/index.html create mode 100644 distribution/json4processing-0.1.6/reference/allclasses-frame.html create mode 100644 distribution/json4processing-0.1.6/reference/allclasses-noframe.html create mode 100644 distribution/json4processing-0.1.6/reference/constant-values.html create mode 100644 distribution/json4processing-0.1.6/reference/deprecated-list.html create mode 100644 distribution/json4processing-0.1.6/reference/help-doc.html create mode 100644 distribution/json4processing-0.1.6/reference/index-all.html create mode 100644 distribution/json4processing-0.1.6/reference/index.html create mode 100644 distribution/json4processing-0.1.6/reference/org/json/CDL.html create mode 100644 distribution/json4processing-0.1.6/reference/org/json/Cookie.html create mode 100644 distribution/json4processing-0.1.6/reference/org/json/CookieList.html create mode 100644 distribution/json4processing-0.1.6/reference/org/json/HTTP.html create mode 100644 distribution/json4processing-0.1.6/reference/org/json/HTTPTokener.html create mode 100644 distribution/json4processing-0.1.6/reference/org/json/JSON.JSONType.html create mode 100644 distribution/json4processing-0.1.6/reference/org/json/JSON.html create mode 100644 distribution/json4processing-0.1.6/reference/org/json/JSONArr.html create mode 100644 distribution/json4processing-0.1.6/reference/org/json/JSONException.html create mode 100644 distribution/json4processing-0.1.6/reference/org/json/JSONML.html create mode 100644 distribution/json4processing-0.1.6/reference/org/json/JSONObj.html create mode 100644 distribution/json4processing-0.1.6/reference/org/json/JSONString.html create mode 100644 distribution/json4processing-0.1.6/reference/org/json/JSONStringer.html create mode 100644 distribution/json4processing-0.1.6/reference/org/json/JSONTokener.html create mode 100644 distribution/json4processing-0.1.6/reference/org/json/JSONWriter.html create mode 100644 distribution/json4processing-0.1.6/reference/org/json/XML.html create mode 100644 distribution/json4processing-0.1.6/reference/org/json/XMLTokener.html create mode 100644 distribution/json4processing-0.1.6/reference/org/json/package-frame.html create mode 100644 distribution/json4processing-0.1.6/reference/org/json/package-summary.html create mode 100644 distribution/json4processing-0.1.6/reference/org/json/package-tree.html create mode 100644 distribution/json4processing-0.1.6/reference/overview-tree.html create mode 100644 distribution/json4processing-0.1.6/reference/package-list create mode 100644 distribution/json4processing-0.1.6/reference/resources/background.gif create mode 100644 distribution/json4processing-0.1.6/reference/resources/tab.gif create mode 100644 distribution/json4processing-0.1.6/reference/resources/titlebar.gif create mode 100644 distribution/json4processing-0.1.6/reference/resources/titlebar_end.gif create mode 100644 distribution/json4processing-0.1.6/reference/serialized-form.html create mode 100644 distribution/json4processing-0.1.6/reference/stylesheet.css create mode 100644 distribution/json4processing-0.1.6/stylesheet.css create mode 100644 src/org/json/JSON.java rename src/org/json/{JSONArray.java => JSONArr.java} (87%) rename src/org/json/{JSONObject.java => JSONObj.java} (91%) diff --git a/distribution/json4processing-0.1.6/download/json4processing-0.1.6.zip b/distribution/json4processing-0.1.6/download/json4processing-0.1.6.zip new file mode 100644 index 0000000000000000000000000000000000000000..ecde9f0dddba9f25535abdc73f8f4f6b238a82e5 GIT binary patch literal 218226 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 z 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

SwG6rU2#@g`Hymh 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


?t+GH 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

DUxp`qs1SGD8 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≀c* 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 + + +json4processing + + + + + + + + + + + + + + +

+ + + + + +
+ +
+

json4processing

+

+ A library by Andreas Goransson for the programming environment processing. Last update, 03/22/2013. +

+

+ Feel free to replace this paragraph with a description of the library. Contributed libraries are developed, documented, and maintained by members of the Processing community. Further directions are included with each library. For feedback and support, please post to the Discourse. We strongly encourage all libraries to be open source, but not all of them are. +

+
+ + + +
+

Download

+

+ Download json4processing version 0.1.6 in + .zip format. +

+

Installation

+

+ Unzip and put the extracted json4processing folder into the libraries folder of your processing sketches. Reference and examples are included in the json4processing folder. +

+
+ + +
+

Keywords ?

+

Reference. Have a look at the javadoc reference here. a copy of the reference is included in the .zip as well.

+

Source. The source code of json4processing is available at github, and its repository can be browsed here.

+
+ +
+

Examples

+

Find a list of examples in the current distribution of json4processing, or have a look at them by following the links below.

+ +
+ + +
+

Tested

+

+ + Platform linux, windows + + +
Processing 1.5.1 + + +
Dependencies ? +

+
+ + + + + + + + + + + + +
+
+ + +
+ + \ No newline at end of file diff --git a/distribution/json4processing-0.1.6/reference/allclasses-frame.html b/distribution/json4processing-0.1.6/reference/allclasses-frame.html new file mode 100644 index 000000000..c30d384db --- /dev/null +++ b/distribution/json4processing-0.1.6/reference/allclasses-frame.html @@ -0,0 +1,34 @@ + + + + + +All Classes (Javadocs: json4processing) + + + + +

All Classes

+ + + diff --git a/distribution/json4processing-0.1.6/reference/allclasses-noframe.html b/distribution/json4processing-0.1.6/reference/allclasses-noframe.html new file mode 100644 index 000000000..02b38ec6a --- /dev/null +++ b/distribution/json4processing-0.1.6/reference/allclasses-noframe.html @@ -0,0 +1,34 @@ + + + + + +All Classes (Javadocs: json4processing) + + + + +

All Classes

+ + + diff --git a/distribution/json4processing-0.1.6/reference/constant-values.html b/distribution/json4processing-0.1.6/reference/constant-values.html new file mode 100644 index 000000000..ef0211c2f --- /dev/null +++ b/distribution/json4processing-0.1.6/reference/constant-values.html @@ -0,0 +1,141 @@ + + + + + +Constant Field Values (Javadocs: json4processing) + + + + + + + + + + +
+

Constant Field Values

+

Contents

+ +
+
+ + +

org.json.*

+
    +
  • + + + + + + + + + + + + + + +
    org.json.HTTP 
    Modifier and TypeConstant FieldValue
    + +public static final java.lang.StringCRLF"\r\n"
    +
  • +
+
+ + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.6/reference/deprecated-list.html b/distribution/json4processing-0.1.6/reference/deprecated-list.html new file mode 100644 index 000000000..e416351d7 --- /dev/null +++ b/distribution/json4processing-0.1.6/reference/deprecated-list.html @@ -0,0 +1,112 @@ + + + + + +Deprecated List (Javadocs: json4processing) + + + + + + + +
+ + + + + +
+ + +
+

Deprecated API

+

Contents

+
+ +
+ + + + + +
+ + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.6/reference/help-doc.html b/distribution/json4processing-0.1.6/reference/help-doc.html new file mode 100644 index 000000000..0633d6289 --- /dev/null +++ b/distribution/json4processing-0.1.6/reference/help-doc.html @@ -0,0 +1,209 @@ + + + + + +API Help (Javadocs: json4processing) + + + + + + + +
+ + + + + +
+ + +
+

How This API Document Is Organized

+
This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.
+
+
+
    +
  • +

    Package

    +

    Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain six categories:

    +
      +
    • Interfaces (italic)
    • +
    • Classes
    • +
    • Enums
    • +
    • Exceptions
    • +
    • Errors
    • +
    • Annotation Types
    • +
    +
  • +
  • +

    Class/Interface

    +

    Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

    +
      +
    • Class inheritance diagram
    • +
    • Direct Subclasses
    • +
    • All Known Subinterfaces
    • +
    • All Known Implementing Classes
    • +
    • Class/interface declaration
    • +
    • Class/interface description
    • +
    +
      +
    • Nested Class Summary
    • +
    • Field Summary
    • +
    • Constructor Summary
    • +
    • Method Summary
    • +
    +
      +
    • Field Detail
    • +
    • Constructor Detail
    • +
    • Method Detail
    • +
    +

    Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

    +
  • +
  • +

    Annotation Type

    +

    Each annotation type has its own separate page with the following sections:

    +
      +
    • Annotation Type declaration
    • +
    • Annotation Type description
    • +
    • Required Element Summary
    • +
    • Optional Element Summary
    • +
    • Element Detail
    • +
    +
  • +
  • +

    Enum

    +

    Each enum has its own separate page with the following sections:

    +
      +
    • Enum declaration
    • +
    • Enum description
    • +
    • Enum Constant Summary
    • +
    • Enum Constant Detail
    • +
    +
  • +
  • +

    Tree (Class Hierarchy)

    +

    There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.

    +
      +
    • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
    • +
    • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
    • +
    +
  • +
  • +

    Deprecated API

    +

    The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.

    +
  • +
  • +

    Index

    +

    The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.

    +
  • +
  • +

    Prev/Next

    +

    These links take you to the next or previous class, interface, package, or related page.

    +
  • +
  • +

    Frames/No Frames

    +

    These links show and hide the HTML frames. All pages are available with or without frames.

    +
  • +
  • +

    All Classes

    +

    The All Classes link shows all classes and interfaces except non-static nested types.

    +
  • +
  • +

    Serialized Form

    +

    Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.

    +
  • +
  • +

    Constant Field Values

    +

    The Constant Field Values page lists the static final fields and their values.

    +
  • +
+This help file applies to API documentation generated using the standard doclet.
+ +
+ + + + + +
+ + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.6/reference/index-all.html b/distribution/json4processing-0.1.6/reference/index-all.html new file mode 100644 index 000000000..684679dbb --- /dev/null +++ b/distribution/json4processing-0.1.6/reference/index-all.html @@ -0,0 +1,1187 @@ + + + + + +Index (Javadocs: json4processing) + + + + + + + +
+ + + + + +
+ + +
A B C D E G H I J K L M N O P Q R S T U V W X  + + +

A

+
+
accumulate(String, Object) - Method in class org.json.JSONObj
+
+
Accumulate values under a key.
+
+
AMP - Static variable in class org.json.XML
+
+
The Character '&'.
+
+
APOS - Static variable in class org.json.XML
+
+
The Character '''.
+
+
append(String, Object) - Method in class org.json.JSONObj
+
+
Append values to the array under a key.
+
+
array() - Method in class org.json.JSONWriter
+
+
Begin appending a new array.
+
+
+ + + +

B

+
+
back() - Method in class org.json.JSONTokener
+
+
Back up one character.
+
+
BANG - Static variable in class org.json.XML
+
+
The Character '!'.
+
+
+ + + +

C

+
+
CDL - Class in org.json
+
+
This provides static methods to convert comma delimited text into a + JSONArray, and to covert a JSONArray into comma delimited text.
+
+
CDL() - Constructor for class org.json.CDL
+
 
+
Cookie - Class in org.json
+
+
Convert a web browser cookie specification to a JSONObject and back.
+
+
Cookie() - Constructor for class org.json.Cookie
+
 
+
CookieList - Class in org.json
+
+
Convert a web browser cookie list string to a JSONObject and back.
+
+
CookieList() - Constructor for class org.json.CookieList
+
 
+
CRLF - Static variable in class org.json.HTTP
+
+
Carriage return/line feed.
+
+
+ + + +

D

+
+
dehexchar(char) - Static method in class org.json.JSONTokener
+
+
Get the hex value of a character (base16).
+
+
doubleToString(double) - Static method in class org.json.JSONObj
+
+
Produce a string from a double.
+
+
+ + + +

E

+
+
end() - Method in class org.json.JSONTokener
+
 
+
endArray() - Method in class org.json.JSONWriter
+
+
End an array.
+
+
endObject() - Method in class org.json.JSONWriter
+
+
End an object.
+
+
entity - Static variable in class org.json.XMLTokener
+
+
The table of entity values.
+
+
EQ - Static variable in class org.json.XML
+
+
The Character '='.
+
+
escape(String) - Static method in class org.json.Cookie
+
+
Produce a copy of a string in which the characters '+', '%', '=', ';' + and control characters are replaced with "%hh".
+
+
escape(String) - Static method in class org.json.XML
+
+
Replace special characters with XML escapes:
+
+
+ + + +

G

+
+
get(int) - Method in class org.json.JSONArr
+
+
Get the object value associated with an index.
+
+
get(String) - Method in class org.json.JSONObj
+
+
Get the value object associated with a key.
+
+
getArray(int) - Method in class org.json.JSON
+
 
+
getBoolean(String) - Method in class org.json.JSON
+
 
+
getBoolean(int) - Method in class org.json.JSON
+
 
+
getBoolean(int) - Method in class org.json.JSONArr
+
+
Get the boolean value associated with an index.
+
+
getBoolean(String) - Method in class org.json.JSONObj
+
+
Get the boolean value associated with a key.
+
+
getCause() - Method in exception org.json.JSONException
+
 
+
getDouble(String) - Method in class org.json.JSON
+
 
+
getDouble(int) - Method in class org.json.JSON
+
 
+
getDouble(int) - Method in class org.json.JSONArr
+
+
Get the double value associated with an index.
+
+
getDouble(String) - Method in class org.json.JSONObj
+
+
Get the double value associated with a key.
+
+
getFloat(String) - Method in class org.json.JSON
+
 
+
getFloat(int) - Method in class org.json.JSON
+
 
+
getInt(String) - Method in class org.json.JSON
+
 
+
getInt(int) - Method in class org.json.JSON
+
 
+
getInt(int) - Method in class org.json.JSONArr
+
+
Get the int value associated with an index.
+
+
getInt(String) - Method in class org.json.JSONObj
+
+
Get the int value associated with a key.
+
+
getJSONArray(String) - Method in class org.json.JSON
+
 
+
getJSONArray(int) - Method in class org.json.JSONArr
+
+
Get the JSONArray associated with an index.
+
+
getJSONArray(String) - Method in class org.json.JSONObj
+
+
Get the JSONArray value associated with a key.
+
+
getJSONObject(String) - Method in class org.json.JSON
+
 
+
getJSONObject(int) - Method in class org.json.JSONArr
+
+
Get the JSONObject associated with an index.
+
+
getJSONObject(String) - Method in class org.json.JSONObj
+
+
Get the JSONObject value associated with a key.
+
+
getLong(int) - Method in class org.json.JSONArr
+
+
Get the long value associated with an index.
+
+
getLong(String) - Method in class org.json.JSONObj
+
+
Get the long value associated with a key.
+
+
getNames(JSONObj) - Static method in class org.json.JSONObj
+
+
Get an array of field names from a JSONObject.
+
+
getNames(Object) - Static method in class org.json.JSONObj
+
+
Get an array of field names from an Object.
+
+
getObject(int) - Method in class org.json.JSON
+
 
+
getString(String) - Method in class org.json.JSON
+
 
+
getString(int) - Method in class org.json.JSON
+
 
+
getString(int) - Method in class org.json.JSONArr
+
+
Get the string associated with an index.
+
+
getString(String) - Method in class org.json.JSONObj
+
+
Get the string associated with a key.
+
+
GT - Static variable in class org.json.XML
+
+
The Character '>'.
+
+
+ + + +

H

+
+
has(String) - Method in class org.json.JSONObj
+
+
Determine if the JSONObject contains a specific key.
+
+
HTTP - Class in org.json
+
+
Convert an HTTP header to a JSONObject and back.
+
+
HTTP() - Constructor for class org.json.HTTP
+
 
+
HTTPTokener - Class in org.json
+
+
The HTTPTokener extends the JSONTokener to provide additional methods + for the parsing of HTTP headers.
+
+
HTTPTokener(String) - Constructor for class org.json.HTTPTokener
+
+
Construct an HTTPTokener from a string.
+
+
+ + + +

I

+
+
increment(String) - Method in class org.json.JSONObj
+
+
Increment a property of a JSONObject.
+
+
isNull(int) - Method in class org.json.JSONArr
+
+
Determine if the value is null.
+
+
isNull(String) - Method in class org.json.JSONObj
+
+
Determine if the value associated with the key is null or if there is no + value.
+
+
+ + + +

J

+
+
join(String) - Method in class org.json.JSONArr
+
+
Make a string from the contents of this JSONArray.
+
+
JSON - Class in org.json
+
+
This is a "mashup" test for combining the two JSON types, the goal is to make + it work similarly to how the processing XML library works.
+
+
JSON(JSONTokener) - Constructor for class org.json.JSON
+
+
Constructor for JSONTokeners.
+
+
JSON.JSONType - Enum in org.json
+
 
+
JSONArr - Class in org.json
+
+
A JSONArray is an ordered sequence of values.
+
+
JSONArr() - Constructor for class org.json.JSONArr
+
+
Construct an empty JSONArray.
+
+
JSONArr(JSONTokener) - Constructor for class org.json.JSONArr
+
+
Construct a JSONArray from a JSONTokener.
+
+
JSONArr(String) - Constructor for class org.json.JSONArr
+
+
Construct a JSONArray from a source JSON text.
+
+
JSONArr(Collection) - Constructor for class org.json.JSONArr
+
+
Construct a JSONArray from a Collection.
+
+
JSONArr(Object) - Constructor for class org.json.JSONArr
+
+
Construct a JSONArray from an array
+
+
JSONException - Exception in org.json
+
+
The JSONException is thrown by the JSON.org classes when things are amiss.
+
+
JSONException(String) - Constructor for exception org.json.JSONException
+
+
Constructs a JSONException with an explanatory message.
+
+
JSONException(Throwable) - Constructor for exception org.json.JSONException
+
 
+
JSONML - Class in org.json
+
+
This provides static methods to convert an XML text into a JSONArray or + JSONObject, and to covert a JSONArray or JSONObject into an XML text using + the JsonML transform.
+
+
JSONML() - Constructor for class org.json.JSONML
+
 
+
JSONObj - Class in org.json
+
+
A JSONObject is an unordered collection of name/value pairs.
+
+
JSONObj() - Constructor for class org.json.JSONObj
+
+
Construct an empty JSONObject.
+
+
JSONObj(JSONObj, String[]) - Constructor for class org.json.JSONObj
+
+
Construct a JSONObject from a subset of another JSONObject.
+
+
JSONObj(JSONTokener) - Constructor for class org.json.JSONObj
+
+
Construct a JSONObject from a JSONTokener.
+
+
JSONObj(Map) - Constructor for class org.json.JSONObj
+
+
Construct a JSONObject from a Map.
+
+
JSONObj(Object) - Constructor for class org.json.JSONObj
+
+
Construct a JSONObject from an Object using bean getters.
+
+
JSONObj(Object, String[]) - Constructor for class org.json.JSONObj
+
+
Construct a JSONObject from an Object, using reflection to find the + public members.
+
+
JSONObj(String) - Constructor for class org.json.JSONObj
+
+
Construct a JSONObject from a source JSON text string.
+
+
JSONObj(String, Locale) - Constructor for class org.json.JSONObj
+
+
Construct a JSONObject from a ResourceBundle.
+
+
JSONString - Interface in org.json
+
+
The JSONString interface allows a toJSONString() + method so that a class can change the behavior of + JSONObject.toString(), JSONArray.toString(), + and JSONWriter.value(Object).
+
+
JSONStringer - Class in org.json
+
+
JSONStringer provides a quick and convenient way of producing JSON text.
+
+
JSONStringer() - Constructor for class org.json.JSONStringer
+
+
Make a fresh JSONStringer.
+
+
JSONTokener - Class in org.json
+
+
A JSONTokener takes a source string and extracts characters and tokens from + it.
+
+
JSONTokener(Reader) - Constructor for class org.json.JSONTokener
+
+
Construct a JSONTokener from a Reader.
+
+
JSONTokener(InputStream) - Constructor for class org.json.JSONTokener
+
+
Construct a JSONTokener from an InputStream.
+
+
JSONTokener(String) - Constructor for class org.json.JSONTokener
+
+
Construct a JSONTokener from a string.
+
+
JSONWriter - Class in org.json
+
+
JSONWriter provides a quick and convenient way of producing JSON text.
+
+
JSONWriter(Writer) - Constructor for class org.json.JSONWriter
+
+
Make a fresh JSONWriter.
+
+
+ + + +

K

+
+
key(String) - Method in class org.json.JSONWriter
+
+
Append a key.
+
+
keys() - Method in class org.json.JSONObj
+
+
Get an enumeration of the keys of the JSONObject.
+
+
+ + + +

L

+
+
length() - Method in class org.json.JSONArr
+
+
Get the number of elements in the JSONArray, included nulls.
+
+
length() - Method in class org.json.JSONObj
+
+
Get the number of keys stored in the JSONObject.
+
+
LT - Static variable in class org.json.XML
+
+
The Character '<'.
+
+
+ + + +

M

+
+
more() - Method in class org.json.JSONTokener
+
+
Determine if the source string still contains characters that next() + can consume.
+
+
+ + + +

N

+
+
names() - Method in class org.json.JSONObj
+
+
Produce a JSONArray containing the names of the elements of this + JSONObject.
+
+
next() - Method in class org.json.JSONTokener
+
+
Get the next character in the source string.
+
+
next(char) - Method in class org.json.JSONTokener
+
+
Consume the next character, and check that it matches a specified + character.
+
+
next(int) - Method in class org.json.JSONTokener
+
+
Get the next n characters.
+
+
nextCDATA() - Method in class org.json.XMLTokener
+
+
Get the text in the CDATA block.
+
+
nextClean() - Method in class org.json.JSONTokener
+
+
Get the next char in the string, skipping whitespace.
+
+
nextContent() - Method in class org.json.XMLTokener
+
+
Get the next XML outer token, trimming whitespace.
+
+
nextEntity(char) - Method in class org.json.XMLTokener
+
+
Return the next entity.
+
+
nextMeta() - Method in class org.json.XMLTokener
+
+
Returns the next XML meta token.
+
+
nextString(char) - Method in class org.json.JSONTokener
+
+
Return the characters up to the next close quote character.
+
+
nextTo(char) - Method in class org.json.JSONTokener
+
+
Get the text up but not including the specified character or the + end of line, whichever comes first.
+
+
nextTo(String) - Method in class org.json.JSONTokener
+
+
Get the text up but not including one of the specified delimiter + characters or the end of line, whichever comes first.
+
+
nextToken() - Method in class org.json.HTTPTokener
+
+
Get the next token or string.
+
+
nextToken() - Method in class org.json.XMLTokener
+
+
Get the next XML Token.
+
+
nextValue() - Method in class org.json.JSONTokener
+
+
Get the next value.
+
+
noSpace(String) - Static method in class org.json.XML
+
+
Throw an exception if the string contains whitespace.
+
+
NULL - Static variable in class org.json.JSON
+
+
It is sometimes more convenient and less ambiguous to have a + NULL object than to use Java's null value.
+
+
NULL - Static variable in class org.json.JSONObj
+
+
It is sometimes more convenient and less ambiguous to have a + NULL object than to use Java's null value.
+
+
numberToString(Number) - Static method in class org.json.JSONObj
+
+
Produce a string from a Number.
+
+
+ + + +

O

+
+
object() - Method in class org.json.JSONWriter
+
+
Begin appending a new object.
+
+
opt(int) - Method in class org.json.JSONArr
+
+
Get the optional object value associated with an index.
+
+
opt(String) - Method in class org.json.JSONObj
+
+
Get an optional value associated with a key.
+
+
optBoolean(int) - Method in class org.json.JSONArr
+
+
Get the optional boolean value associated with an index.
+
+
optBoolean(int, boolean) - Method in class org.json.JSONArr
+
+
Get the optional boolean value associated with an index.
+
+
optBoolean(String) - Method in class org.json.JSONObj
+
+
Get an optional boolean associated with a key.
+
+
optBoolean(String, boolean) - Method in class org.json.JSONObj
+
+
Get an optional boolean associated with a key.
+
+
optDouble(int) - Method in class org.json.JSONArr
+
+
Get the optional double value associated with an index.
+
+
optDouble(int, double) - Method in class org.json.JSONArr
+
+
Get the optional double value associated with an index.
+
+
optDouble(String) - Method in class org.json.JSONObj
+
+
Get an optional double associated with a key, or NaN if there is no such + key or if its value is not a number.
+
+
optDouble(String, double) - Method in class org.json.JSONObj
+
+
Get an optional double associated with a key, or the defaultValue if + there is no such key or if its value is not a number.
+
+
optInt(int) - Method in class org.json.JSONArr
+
+
Get the optional int value associated with an index.
+
+
optInt(int, int) - Method in class org.json.JSONArr
+
+
Get the optional int value associated with an index.
+
+
optInt(String) - Method in class org.json.JSONObj
+
+
Get an optional int value associated with a key, or zero if there is no + such key or if the value is not a number.
+
+
optInt(String, int) - Method in class org.json.JSONObj
+
+
Get an optional int value associated with a key, or the default if there + is no such key or if the value is not a number.
+
+
optJSONArray(int) - Method in class org.json.JSONArr
+
+
Get the optional JSONArray associated with an index.
+
+
optJSONArray(String) - Method in class org.json.JSONObj
+
+
Get an optional JSONArray associated with a key.
+
+
optJSONObject(int) - Method in class org.json.JSONArr
+
+
Get the optional JSONObject associated with an index.
+
+
optJSONObject(String) - Method in class org.json.JSONObj
+
+
Get an optional JSONObject associated with a key.
+
+
optLong(int) - Method in class org.json.JSONArr
+
+
Get the optional long value associated with an index.
+
+
optLong(int, long) - Method in class org.json.JSONArr
+
+
Get the optional long value associated with an index.
+
+
optLong(String) - Method in class org.json.JSONObj
+
+
Get an optional long value associated with a key, or zero if there is no + such key or if the value is not a number.
+
+
optLong(String, long) - Method in class org.json.JSONObj
+
+
Get an optional long value associated with a key, or the default if there + is no such key or if the value is not a number.
+
+
optString(int) - Method in class org.json.JSONArr
+
+
Get the optional string value associated with an index.
+
+
optString(int, String) - Method in class org.json.JSONArr
+
+
Get the optional string associated with an index.
+
+
optString(String) - Method in class org.json.JSONObj
+
+
Get an optional string associated with a key.
+
+
optString(String, String) - Method in class org.json.JSONObj
+
+
Get an optional string associated with a key.
+
+
org.json - package org.json
+
 
+
+ + + +

P

+
+
parse(String) - Static method in class org.json.JSON
+
+
Open a json file
+
+
put(boolean) - Method in class org.json.JSONArr
+
+
Append a boolean value.
+
+
put(Collection) - Method in class org.json.JSONArr
+
+
Put a value in the JSONArray, where the value will be a + JSONArray which is produced from a Collection.
+
+
put(double) - Method in class org.json.JSONArr
+
+
Append a double value.
+
+
put(int) - Method in class org.json.JSONArr
+
+
Append an int value.
+
+
put(long) - Method in class org.json.JSONArr
+
+
Append an long value.
+
+
put(Map) - Method in class org.json.JSONArr
+
+
Put a value in the JSONArray, where the value will be a + JSONObject which is produced from a Map.
+
+
put(Object) - Method in class org.json.JSONArr
+
+
Append an object value.
+
+
put(int, boolean) - Method in class org.json.JSONArr
+
+
Put or replace a boolean value in the JSONArray.
+
+
put(int, Collection) - Method in class org.json.JSONArr
+
+
Put a value in the JSONArray, where the value will be a + JSONArray which is produced from a Collection.
+
+
put(int, double) - Method in class org.json.JSONArr
+
+
Put or replace a double value.
+
+
put(int, int) - Method in class org.json.JSONArr
+
+
Put or replace an int value.
+
+
put(int, long) - Method in class org.json.JSONArr
+
+
Put or replace a long value.
+
+
put(int, Map) - Method in class org.json.JSONArr
+
+
Put a value in the JSONArray, where the value will be a + JSONObject that is produced from a Map.
+
+
put(int, Object) - Method in class org.json.JSONArr
+
+
Put or replace an object value in the JSONArray.
+
+
put(String, boolean) - Method in class org.json.JSONObj
+
+
Put a key/boolean pair in the JSONObject.
+
+
put(String, Collection) - Method in class org.json.JSONObj
+
+
Put a key/value pair in the JSONObject, where the value will be a + JSONArray which is produced from a Collection.
+
+
put(String, double) - Method in class org.json.JSONObj
+
+
Put a key/double pair in the JSONObject.
+
+
put(String, int) - Method in class org.json.JSONObj
+
+
Put a key/int pair in the JSONObject.
+
+
put(String, long) - Method in class org.json.JSONObj
+
+
Put a key/long pair in the JSONObject.
+
+
put(String, Map) - Method in class org.json.JSONObj
+
+
Put a key/value pair in the JSONObject, where the value will be a + JSONObject which is produced from a Map.
+
+
put(String, Object) - Method in class org.json.JSONObj
+
+
Put a key/value pair in the JSONObject.
+
+
putOnce(String, Object) - Method in class org.json.JSONObj
+
+
Put a key/value pair in the JSONObject, but only if the key and the value + are both non-null, and only if there is not already a member with that + name.
+
+
putOpt(String, Object) - Method in class org.json.JSONObj
+
+
Put a key/value pair in the JSONObject, but only if the key and the value + are both non-null.
+
+
+ + + +

Q

+
+
QUEST - Static variable in class org.json.XML
+
+
The Character '?'.
+
+
QUOT - Static variable in class org.json.XML
+
+
The Character '"'.
+
+
quote(String) - Static method in class org.json.JSONObj
+
+
Produce a string in double quotes with backslash sequences in all the + right places.
+
+
+ + + +

R

+
+
remove(int) - Method in class org.json.JSONArr
+
+
Remove an index and close the hole.
+
+
remove(String) - Method in class org.json.JSONObj
+
+
Remove a name and its value, if present.
+
+
rowToJSONArray(JSONTokener) - Static method in class org.json.CDL
+
+
Produce a JSONArray of strings from a row of comma delimited values.
+
+
rowToJSONObject(JSONArr, JSONTokener) - Static method in class org.json.CDL
+
+
Produce a JSONObject from a row of comma delimited text, using a + parallel JSONArray of strings to provides the names of the elements.
+
+
rowToString(JSONArr) - Static method in class org.json.CDL
+
+
Produce a comma delimited text row from a JSONArray.
+
+
+ + + +

S

+
+
skipPast(String) - Method in class org.json.XMLTokener
+
+
Skip characters until past the requested string.
+
+
skipTo(char) - Method in class org.json.JSONTokener
+
+
Skip characters until the next character is the requested character.
+
+
SLASH - Static variable in class org.json.XML
+
+
The Character '/'.
+
+
stringToValue(String) - Static method in class org.json.JSONObj
+
+
Try to convert a string into a number, boolean, or null.
+
+
stringToValue(String) - Static method in class org.json.XML
+
+
Try to convert a string into a number, boolean, or null.
+
+
+ + + +

T

+
+
testValidity(Object) - Static method in class org.json.JSONObj
+
+
Throw an exception if the object is a NaN or infinite number.
+
+
toJSONArray(String) - Static method in class org.json.CDL
+
+
Produce a JSONArray of JSONObjects from a comma delimited text string, + using the first row as a source of names.
+
+
toJSONArray(JSONTokener) - Static method in class org.json.CDL
+
+
Produce a JSONArray of JSONObjects from a comma delimited text string, + using the first row as a source of names.
+
+
toJSONArray(JSONArr, String) - Static method in class org.json.CDL
+
+
Produce a JSONArray of JSONObjects from a comma delimited text string + using a supplied JSONArray as the source of element names.
+
+
toJSONArray(JSONArr, JSONTokener) - Static method in class org.json.CDL
+
+
Produce a JSONArray of JSONObjects from a comma delimited text string + using a supplied JSONArray as the source of element names.
+
+
toJSONArray(String) - Static method in class org.json.JSONML
+
+
Convert a well-formed (but not necessarily valid) XML string into a + JSONArray using the JsonML transform.
+
+
toJSONArray(XMLTokener) - Static method in class org.json.JSONML
+
+
Convert a well-formed (but not necessarily valid) XML string into a + JSONArray using the JsonML transform.
+
+
toJSONArray(JSONArr) - Method in class org.json.JSONObj
+
+
Produce a JSONArray containing the values of the members of this + JSONObject.
+
+
toJSONObject(String) - Static method in class org.json.Cookie
+
+
Convert a cookie specification string into a JSONObject.
+
+
toJSONObject(String) - Static method in class org.json.CookieList
+
+
Convert a cookie list into a JSONObject.
+
+
toJSONObject(String) - Static method in class org.json.HTTP
+
+
Convert an HTTP header string into a JSONObject.
+
+
toJSONObject(JSONArr) - Method in class org.json.JSONArr
+
+
Produce a JSONObject by combining a JSONArray of names with the values + of this JSONArray.
+
+
toJSONObject(XMLTokener) - Static method in class org.json.JSONML
+
+
Convert a well-formed (but not necessarily valid) XML string into a + JSONObject using the JsonML transform.
+
+
toJSONObject(String) - Static method in class org.json.JSONML
+
+
Convert a well-formed (but not necessarily valid) XML string into a + JSONObject using the JsonML transform.
+
+
toJSONObject(String) - Static method in class org.json.XML
+
+
Convert a well-formed (but not necessarily valid) XML string into a + JSONObject.
+
+
toJSONString() - Method in interface org.json.JSONString
+
+
The toJSONString method allows a class to produce its own JSON + serialization.
+
+
toString(JSONArr) - Static method in class org.json.CDL
+
+
Produce a comma delimited text from a JSONArray of JSONObjects.
+
+
toString(JSONArr, JSONArr) - Static method in class org.json.CDL
+
+
Produce a comma delimited text from a JSONArray of JSONObjects using + a provided list of names.
+
+
toString(JSONObj) - Static method in class org.json.Cookie
+
+
Convert a JSONObject into a cookie specification string.
+
+
toString(JSONObj) - Static method in class org.json.CookieList
+
+
Convert a JSONObject into a cookie list.
+
+
toString(JSONObj) - Static method in class org.json.HTTP
+
+
Convert a JSONObject into an HTTP header.
+
+
toString() - Method in class org.json.JSONArr
+
+
Make a JSON text of this JSONArray.
+
+
toString(int) - Method in class org.json.JSONArr
+
+
Make a prettyprinted JSON text of this JSONArray.
+
+
toString(JSONArr) - Static method in class org.json.JSONML
+
+
Reverse the JSONML transformation, making an XML text from a JSONArray.
+
+
toString(JSONObj) - Static method in class org.json.JSONML
+
+
Reverse the JSONML transformation, making an XML text from a JSONObject.
+
+
toString() - Method in class org.json.JSONObj
+
+
Make a JSON text of this JSONObject.
+
+
toString(int) - Method in class org.json.JSONObj
+
+
Make a prettyprinted JSON text of this JSONObject.
+
+
toString() - Method in class org.json.JSONStringer
+
+
Return the JSON text.
+
+
toString() - Method in class org.json.JSONTokener
+
+
Make a printable string of this JSONTokener.
+
+
toString(Object) - Static method in class org.json.XML
+
+
Convert a JSONObject into a well-formed, element-normal XML string.
+
+
toString(Object, String) - Static method in class org.json.XML
+
+
Convert a JSONObject into a well-formed, element-normal XML string.
+
+
+ + + +

U

+
+
unescape(String) - Static method in class org.json.Cookie
+
+
Convert %hh sequences to single characters, and + convert plus to space.
+
+
+ + + +

V

+
+
value(boolean) - Method in class org.json.JSONWriter
+
+
Append either the value true or the value + false.
+
+
value(double) - Method in class org.json.JSONWriter
+
+
Append a double value.
+
+
value(long) - Method in class org.json.JSONWriter
+
+
Append a long value.
+
+
value(Object) - Method in class org.json.JSONWriter
+
+
Append an object value.
+
+
valueOf(String) - Static method in enum org.json.JSON.JSONType
+
+
Returns the enum constant of this type with the specified name.
+
+
values() - Static method in enum org.json.JSON.JSONType
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
valueToString(Object) - Static method in class org.json.JSONObj
+
+
Make a JSON text of an Object value.
+
+
+ + + +

W

+
+
wrap(Object) - Static method in class org.json.JSONObj
+
+
Wrap an object, if necessary.
+
+
write(Writer) - Method in class org.json.JSONArr
+
+
Write the contents of the JSONArray as JSON text to a writer.
+
+
write(Writer) - Method in class org.json.JSONObj
+
+
Write the contents of the JSONObject as JSON text to a writer.
+
+
+ + + +

X

+
+
XML - Class in org.json
+
+
This provides static methods to convert an XML text into a JSONObject, + and to covert a JSONObject into an XML text.
+
+
XML() - Constructor for class org.json.XML
+
 
+
XMLTokener - Class in org.json
+
+
The XMLTokener extends the JSONTokener to provide additional methods + for the parsing of XML texts.
+
+
XMLTokener(String) - Constructor for class org.json.XMLTokener
+
+
Construct an XMLTokener from a string.
+
+
+A B C D E G H I J K L M N O P Q R S T U V W X 
+ +
+ + + + + +
+ + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.6/reference/index.html b/distribution/json4processing-0.1.6/reference/index.html new file mode 100644 index 000000000..67f41f64d --- /dev/null +++ b/distribution/json4processing-0.1.6/reference/index.html @@ -0,0 +1,30 @@ + + + + + +Javadocs: json4processing + + + + + + +<noscript> +<div>JavaScript is disabled on your browser.</div> +</noscript> +<h2>Frame Alert</h2> +<p>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. Link to <a href="org/json/package-summary.html">Non-frame version</a>.</p> + + + diff --git a/distribution/json4processing-0.1.6/reference/org/json/CDL.html b/distribution/json4processing-0.1.6/reference/org/json/CDL.html new file mode 100644 index 000000000..2dfd703f3 --- /dev/null +++ b/distribution/json4processing-0.1.6/reference/org/json/CDL.html @@ -0,0 +1,470 @@ + + + + + +CDL (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class CDL

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.json.CDL
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class CDL
    +extends java.lang.Object
    +
    This provides static methods to convert comma delimited text into a + JSONArray, and to covert a JSONArray into comma delimited text. Comma + delimited text is a very popular format for data interchange. It is + understood by most database, spreadsheet, and organizer programs. +

    + Each row of text represents a row in a table or a data record. Each row + ends with a NEWLINE character. Each row contains one or more values. + Values are separated by commas. A value can contain any character except + for comma, unless is is wrapped in single quotes or double quotes. +

    + The first row usually contains the names of the columns. +

    + A comma delimited list can be converted into a JSONArray of JSONObjects. + The names for the elements in the JSONObjects can be taken from the names + in the first row.

    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      CDL() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      static JSONArrrowToJSONArray(JSONTokener x) +
      Produce a JSONArray of strings from a row of comma delimited values.
      +
      static JSONObjrowToJSONObject(JSONArr names, + JSONTokener x) +
      Produce a JSONObject from a row of comma delimited text, using a + parallel JSONArray of strings to provides the names of the elements.
      +
      static java.lang.StringrowToString(JSONArr ja) +
      Produce a comma delimited text row from a JSONArray.
      +
      static JSONArrtoJSONArray(JSONArr names, + JSONTokener x) +
      Produce a JSONArray of JSONObjects from a comma delimited text string + using a supplied JSONArray as the source of element names.
      +
      static JSONArrtoJSONArray(JSONArr names, + java.lang.String string) +
      Produce a JSONArray of JSONObjects from a comma delimited text string + using a supplied JSONArray as the source of element names.
      +
      static JSONArrtoJSONArray(JSONTokener x) +
      Produce a JSONArray of JSONObjects from a comma delimited text string, + using the first row as a source of names.
      +
      static JSONArrtoJSONArray(java.lang.String string) +
      Produce a JSONArray of JSONObjects from a comma delimited text string, + using the first row as a source of names.
      +
      static java.lang.StringtoString(JSONArr ja) +
      Produce a comma delimited text from a JSONArray of JSONObjects.
      +
      static java.lang.StringtoString(JSONArr names, + JSONArr ja) +
      Produce a comma delimited text from a JSONArray of JSONObjects using + a provided list of names.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        CDL

        +
        public CDL()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        rowToJSONArray

        +
        public static JSONArr rowToJSONArray(JSONTokener x)
        +                              throws JSONException
        +
        Produce a JSONArray of strings from a row of comma delimited values.
        +
        Parameters:
        x - A JSONTokener of the source text.
        +
        Returns:
        A JSONArray of strings.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        rowToJSONObject

        +
        public static JSONObj rowToJSONObject(JSONArr names,
        +                      JSONTokener x)
        +                               throws JSONException
        +
        Produce a JSONObject from a row of comma delimited text, using a + parallel JSONArray of strings to provides the names of the elements.
        +
        Parameters:
        names - A JSONArray of names. This is commonly obtained from the + first row of a comma delimited text file using the rowToJSONArray + method.
        x - A JSONTokener of the source text.
        +
        Returns:
        A JSONObject combining the names and values.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        rowToString

        +
        public static java.lang.String rowToString(JSONArr ja)
        +
        Produce a comma delimited text row from a JSONArray. Values containing + the comma character will be quoted. Troublesome characters may be + removed.
        +
        Parameters:
        ja - A JSONArray of strings.
        +
        Returns:
        A string ending in NEWLINE.
        +
      • +
      + + + +
        +
      • +

        toJSONArray

        +
        public static JSONArr toJSONArray(java.lang.String string)
        +                           throws JSONException
        +
        Produce a JSONArray of JSONObjects from a comma delimited text string, + using the first row as a source of names.
        +
        Parameters:
        string - The comma delimited text.
        +
        Returns:
        A JSONArray of JSONObjects.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toJSONArray

        +
        public static JSONArr toJSONArray(JSONTokener x)
        +                           throws JSONException
        +
        Produce a JSONArray of JSONObjects from a comma delimited text string, + using the first row as a source of names.
        +
        Parameters:
        x - The JSONTokener containing the comma delimited text.
        +
        Returns:
        A JSONArray of JSONObjects.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toJSONArray

        +
        public static JSONArr toJSONArray(JSONArr names,
        +                  java.lang.String string)
        +                           throws JSONException
        +
        Produce a JSONArray of JSONObjects from a comma delimited text string + using a supplied JSONArray as the source of element names.
        +
        Parameters:
        names - A JSONArray of strings.
        string - The comma delimited text.
        +
        Returns:
        A JSONArray of JSONObjects.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toJSONArray

        +
        public static JSONArr toJSONArray(JSONArr names,
        +                  JSONTokener x)
        +                           throws JSONException
        +
        Produce a JSONArray of JSONObjects from a comma delimited text string + using a supplied JSONArray as the source of element names.
        +
        Parameters:
        names - A JSONArray of strings.
        x - A JSONTokener of the source text.
        +
        Returns:
        A JSONArray of JSONObjects.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static java.lang.String toString(JSONArr ja)
        +                                 throws JSONException
        +
        Produce a comma delimited text from a JSONArray of JSONObjects. The + first row will be a list of names obtained by inspecting the first + JSONObject.
        +
        Parameters:
        ja - A JSONArray of JSONObjects.
        +
        Returns:
        A comma delimited text.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static java.lang.String toString(JSONArr names,
        +                        JSONArr ja)
        +                                 throws JSONException
        +
        Produce a comma delimited text from a JSONArray of JSONObjects using + a provided list of names. The list of names is not included in the + output.
        +
        Parameters:
        names - A JSONArray of strings.
        ja - A JSONArray of JSONObjects.
        +
        Returns:
        A comma delimited text.
        +
        Throws:
        +
        JSONException
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.6/reference/org/json/Cookie.html b/distribution/json4processing-0.1.6/reference/org/json/Cookie.html new file mode 100644 index 000000000..8166b54be --- /dev/null +++ b/distribution/json4processing-0.1.6/reference/org/json/Cookie.html @@ -0,0 +1,347 @@ + + + + + +Cookie (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class Cookie

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.json.Cookie
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class Cookie
    +extends java.lang.Object
    +
    Convert a web browser cookie specification to a JSONObject and back. + JSON and Cookies are both notations for name/value pairs.
    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      Cookie() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      static java.lang.Stringescape(java.lang.String string) +
      Produce a copy of a string in which the characters '+', '%', '=', ';' + and control characters are replaced with "%hh".
      +
      static JSONObjtoJSONObject(java.lang.String string) +
      Convert a cookie specification string into a JSONObject.
      +
      static java.lang.StringtoString(JSONObj jo) +
      Convert a JSONObject into a cookie specification string.
      +
      static java.lang.Stringunescape(java.lang.String string) +
      Convert %hh sequences to single characters, and + convert plus to space.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Cookie

        +
        public Cookie()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        escape

        +
        public static java.lang.String escape(java.lang.String string)
        +
        Produce a copy of a string in which the characters '+', '%', '=', ';' + and control characters are replaced with "%hh". This is a gentle form + of URL encoding, attempting to cause as little distortion to the + string as possible. The characters '=' and ';' are meta characters in + cookies. By convention, they are escaped using the URL-encoding. This is + only a convention, not a standard. Often, cookies are expected to have + encoded values. We encode '=' and ';' because we must. We encode '%' and + '+' because they are meta characters in URL encoding.
        +
        Parameters:
        string - The source string.
        +
        Returns:
        The escaped result.
        +
      • +
      + + + +
        +
      • +

        toJSONObject

        +
        public static JSONObj toJSONObject(java.lang.String string)
        +                            throws JSONException
        +
        Convert a cookie specification string into a JSONObject. The string + will contain a name value pair separated by '='. The name and the value + will be unescaped, possibly converting '+' and '%' sequences. The + cookie properties may follow, separated by ';', also represented as + name=value (except the secure property, which does not have a value). + The name will be stored under the key "name", and the value will be + stored under the key "value". This method does not do checking or + validation of the parameters. It only converts the cookie string into + a JSONObject.
        +
        Parameters:
        string - The cookie specification string.
        +
        Returns:
        A JSONObject containing "name", "value", and possibly other + members.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static java.lang.String toString(JSONObj jo)
        +                                 throws JSONException
        +
        Convert a JSONObject into a cookie specification string. The JSONObject + must contain "name" and "value" members. + If the JSONObject contains "expires", "domain", "path", or "secure" + members, they will be appended to the cookie specification string. + All other members are ignored.
        +
        Parameters:
        jo - A JSONObject
        +
        Returns:
        A cookie specification string
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        unescape

        +
        public static java.lang.String unescape(java.lang.String string)
        +
        Convert %hh sequences to single characters, and + convert plus to space.
        +
        Parameters:
        string - A string that may contain + + (plus) and + %hh sequences.
        +
        Returns:
        The unescaped string.
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.6/reference/org/json/CookieList.html b/distribution/json4processing-0.1.6/reference/org/json/CookieList.html new file mode 100644 index 000000000..831e926b3 --- /dev/null +++ b/distribution/json4processing-0.1.6/reference/org/json/CookieList.html @@ -0,0 +1,295 @@ + + + + + +CookieList (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class CookieList

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.json.CookieList
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class CookieList
    +extends java.lang.Object
    +
    Convert a web browser cookie list string to a JSONObject and back.
    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      CookieList() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      static JSONObjtoJSONObject(java.lang.String string) +
      Convert a cookie list into a JSONObject.
      +
      static java.lang.StringtoString(JSONObj jo) +
      Convert a JSONObject into a cookie list.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        CookieList

        +
        public CookieList()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        toJSONObject

        +
        public static JSONObj toJSONObject(java.lang.String string)
        +                            throws JSONException
        +
        Convert a cookie list into a JSONObject. A cookie list is a sequence + of name/value pairs. The names are separated from the values by '='. + The pairs are separated by ';'. The names and the values + will be unescaped, possibly converting '+' and '%' sequences. + + To add a cookie to a cooklist, + cookielistJSONObject.put(cookieJSONObject.getString("name"), + cookieJSONObject.getString("value"));
        +
        Parameters:
        string - A cookie list string
        +
        Returns:
        A JSONObject
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static java.lang.String toString(JSONObj jo)
        +                                 throws JSONException
        +
        Convert a JSONObject into a cookie list. A cookie list is a sequence + of name/value pairs. The names are separated from the values by '='. + The pairs are separated by ';'. The characters '%', '+', '=', and ';' + in the names and values are replaced by "%hh".
        +
        Parameters:
        jo - A JSONObject
        +
        Returns:
        A cookie list string
        +
        Throws:
        +
        JSONException
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.6/reference/org/json/HTTP.html b/distribution/json4processing-0.1.6/reference/org/json/HTTP.html new file mode 100644 index 000000000..14ac4718d --- /dev/null +++ b/distribution/json4processing-0.1.6/reference/org/json/HTTP.html @@ -0,0 +1,363 @@ + + + + + +HTTP (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class HTTP

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.json.HTTP
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class HTTP
    +extends java.lang.Object
    +
    Convert an HTTP header to a JSONObject and back.
    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Summary

      + + + + + + + + + + +
      Fields 
      Modifier and TypeField and Description
      static java.lang.StringCRLF +
      Carriage return/line feed.
      +
      +
    • +
    + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      HTTP() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      static JSONObjtoJSONObject(java.lang.String string) +
      Convert an HTTP header string into a JSONObject.
      +
      static java.lang.StringtoString(JSONObj jo) +
      Convert a JSONObject into an HTTP header.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        CRLF

        +
        public static final java.lang.String CRLF
        +
        Carriage return/line feed.
        +
        See Also:
        Constant Field Values
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        HTTP

        +
        public HTTP()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        toJSONObject

        +
        public static JSONObj toJSONObject(java.lang.String string)
        +
        Convert an HTTP header string into a JSONObject. It can be a request + header or a response header. A request header will contain +
        {
        +    Method: "POST" (for example),
        +    "Request-URI": "/" (for example),
        +    "HTTP-Version": "HTTP/1.1" (for example)
        + }
        + A response header will contain +
        {
        +    "HTTP-Version": "HTTP/1.1" (for example),
        +    "Status-Code": "200" (for example),
        +    "Reason-Phrase": "OK" (for example)
        + }
        + In addition, the other parameters in the header will be captured, using + the HTTP field names as JSON names, so that
        +    Date: Sun, 26 May 2002 18:06:04 GMT
        +    Cookie: Q=q2=PPEAsg--; B=677gi6ouf29bn&b=2&f=s
        +    Cache-Control: no-cache
        + become +
        {...
        +    Date: "Sun, 26 May 2002 18:06:04 GMT",
        +    Cookie: "Q=q2=PPEAsg--; B=677gi6ouf29bn&b=2&f=s",
        +    "Cache-Control": "no-cache",
        + ...}
        + It does no further checking or conversion. It does not parse dates. + It does not do '%' transforms on URLs.
        +
        Parameters:
        string - An HTTP header string.
        +
        Returns:
        A JSONObject containing the elements and attributes + of the XML string.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static java.lang.String toString(JSONObj jo)
        +
        Convert a JSONObject into an HTTP header. A request header must contain +
        {
        +    Method: "POST" (for example),
        +    "Request-URI": "/" (for example),
        +    "HTTP-Version": "HTTP/1.1" (for example)
        + }
        + A response header must contain +
        {
        +    "HTTP-Version": "HTTP/1.1" (for example),
        +    "Status-Code": "200" (for example),
        +    "Reason-Phrase": "OK" (for example)
        + }
        + Any other members of the JSONObject will be output as HTTP fields. + The result will end with two CRLF pairs.
        +
        Parameters:
        jo - A JSONObject
        +
        Returns:
        An HTTP header string.
        +
        Throws:
        +
        JSONException - if the object does not contain enough + information.
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.6/reference/org/json/HTTPTokener.html b/distribution/json4processing-0.1.6/reference/org/json/HTTPTokener.html new file mode 100644 index 000000000..59fd893bb --- /dev/null +++ b/distribution/json4processing-0.1.6/reference/org/json/HTTPTokener.html @@ -0,0 +1,280 @@ + + + + + +HTTPTokener (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class HTTPTokener

+
+
+ +
+
    +
  • +
    +
    +
    public class HTTPTokener
    +extends JSONTokener
    +
    The HTTPTokener extends the JSONTokener to provide additional methods + for the parsing of HTTP headers.
    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        HTTPTokener

        +
        public HTTPTokener(java.lang.String string)
        +
        Construct an HTTPTokener from a string.
        +
        Parameters:
        string - A source string.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        nextToken

        +
        public java.lang.String nextToken()
        +                           throws JSONException
        +
        Get the next token or string. This is used in parsing HTTP headers.
        +
        Returns:
        A String.
        +
        Throws:
        +
        JSONException
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.6/reference/org/json/JSON.JSONType.html b/distribution/json4processing-0.1.6/reference/org/json/JSON.JSONType.html new file mode 100644 index 000000000..3a2fcfbe5 --- /dev/null +++ b/distribution/json4processing-0.1.6/reference/org/json/JSON.JSONType.html @@ -0,0 +1,334 @@ + + + + + +JSON.JSONType (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Enum JSON.JSONType

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • java.lang.Enum<JSON.JSONType>
    • +
    • +
        +
      • org.json.JSON.JSONType
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.io.Serializable, java.lang.Comparable<JSON.JSONType>
    +
    +
    +
    Enclosing class:
    +
    JSON
    +
    +
    +
    +
    public static enum JSON.JSONType
    +extends java.lang.Enum<JSON.JSONType>
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + + + + + + + + +
      Enum Constants 
      Enum Constant and Description
      ARRAY 
      NULL 
      OBJECT 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      static JSON.JSONTypevalueOf(java.lang.String name) +
      Returns the enum constant of this type with the specified name.
      +
      static JSON.JSONType[]values() +
      Returns an array containing the constants of this enum type, in +the order they are declared.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Enum

        +compareTo, equals, getDeclaringClass, hashCode, name, ordinal, toString, valueOf
      • +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +getClass, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + + + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        values

        +
        public static JSON.JSONType[] values()
        +
        Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
        +for (JSON.JSONType c : JSON.JSONType.values())
        +    System.out.println(c);
        +
        +
        Returns:
        an array containing the constants of this enum type, in +the order they are declared
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static JSON.JSONType valueOf(java.lang.String name)
        +
        Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
        +
        Parameters:
        name - the name of the enum constant to be returned.
        +
        Returns:
        the enum constant with the specified name
        +
        Throws:
        +
        java.lang.IllegalArgumentException - if this enum type has no constant +with the specified name
        +
        java.lang.NullPointerException - if the argument is null
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.6/reference/org/json/JSON.html b/distribution/json4processing-0.1.6/reference/org/json/JSON.html new file mode 100644 index 000000000..bdb318ff4 --- /dev/null +++ b/distribution/json4processing-0.1.6/reference/org/json/JSON.html @@ -0,0 +1,520 @@ + + + + + +JSON (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class JSON

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.json.JSON
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class JSON
    +extends java.lang.Object
    +
    This is a "mashup" test for combining the two JSON types, the goal is to make + it work similarly to how the processing XML library works. + + loadJSON(); should be able of returning both types of objects, and to do that + without having the typecast you need to combine the two classes somehow. + + The way you use this is calling JSON.loadJSON("filename"); (or similar) and + then the class will maintain the type of object it is (either array or + object) and simply forward the requests the user does to the correct class... + of course making sure that the type is of correct class! You shouldn't be + able of calling ".get(index)" on an JSONObject for example... it should then + notify the user by a simple text message to the console.
    +
    Author:
    +
    ksango
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Nested Class Summary

      + + + + + + + + + + +
      Nested Classes 
      Modifier and TypeClass and Description
      static class JSON.JSONType 
      +
    • +
    + +
      +
    • + + +

      Field Summary

      + + + + + + + + + + +
      Fields 
      Modifier and TypeField and Description
      static java.lang.ObjectNULL +
      It is sometimes more convenient and less ambiguous to have a + NULL object than to use Java's null value.
      +
      +
    • +
    + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      JSON(JSONTokener tokener) +
      Constructor for JSONTokeners.
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      org.json.JSON.JSONArraygetArray(int index) 
      booleangetBoolean(int index) 
      booleangetBoolean(java.lang.String key) 
      doublegetDouble(int index) 
      doublegetDouble(java.lang.String key) 
      floatgetFloat(int index) 
      floatgetFloat(java.lang.String key) 
      intgetInt(int index) 
      intgetInt(java.lang.String key) 
      org.json.JSON.JSONArraygetJSONArray(java.lang.String key) 
      org.json.JSON.JSONObjectgetJSONObject(java.lang.String key) 
      org.json.JSON.JSONObjectgetObject(int index) 
      java.lang.StringgetString(int index) 
      java.lang.StringgetString(java.lang.String key) 
      static JSONparse(java.lang.String filename) +
      Open a json file
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        NULL

        +
        public static final java.lang.Object NULL
        +
        It is sometimes more convenient and less ambiguous to have a + NULL object than to use Java's null value. + JSONObject.NULL.equals(null) returns true. + JSONObject.NULL.toString() returns "null".
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        JSON

        +
        public JSON(JSONTokener tokener)
        +
        Constructor for JSONTokeners.
        +
        Parameters:
        tokener -
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        parse

        +
        public static JSON parse(java.lang.String filename)
        +
        Open a json file
        +
        Parameters:
        json -
        +
        Returns:
        +
      • +
      + + + +
        +
      • +

        getString

        +
        public java.lang.String getString(java.lang.String key)
        +
      • +
      + + + +
        +
      • +

        getInt

        +
        public int getInt(java.lang.String key)
        +
      • +
      + + + +
        +
      • +

        getFloat

        +
        public float getFloat(java.lang.String key)
        +
      • +
      + + + +
        +
      • +

        getDouble

        +
        public double getDouble(java.lang.String key)
        +
      • +
      + + + +
        +
      • +

        getBoolean

        +
        public boolean getBoolean(java.lang.String key)
        +
      • +
      + + + +
        +
      • +

        getJSONObject

        +
        public org.json.JSON.JSONObject getJSONObject(java.lang.String key)
        +
      • +
      + + + +
        +
      • +

        getJSONArray

        +
        public org.json.JSON.JSONArray getJSONArray(java.lang.String key)
        +
      • +
      + + + +
        +
      • +

        getString

        +
        public java.lang.String getString(int index)
        +
      • +
      + + + +
        +
      • +

        getInt

        +
        public int getInt(int index)
        +
      • +
      + + + +
        +
      • +

        getFloat

        +
        public float getFloat(int index)
        +
      • +
      + + + +
        +
      • +

        getDouble

        +
        public double getDouble(int index)
        +
      • +
      + + + +
        +
      • +

        getBoolean

        +
        public boolean getBoolean(int index)
        +
      • +
      + + + +
        +
      • +

        getArray

        +
        public org.json.JSON.JSONArray getArray(int index)
        +
      • +
      + + + +
        +
      • +

        getObject

        +
        public org.json.JSON.JSONObject getObject(int index)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.6/reference/org/json/JSONArr.html b/distribution/json4processing-0.1.6/reference/org/json/JSONArr.html new file mode 100644 index 000000000..80407bb11 --- /dev/null +++ b/distribution/json4processing-0.1.6/reference/org/json/JSONArr.html @@ -0,0 +1,1284 @@ + + + + + +JSONArr (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class JSONArr

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.json.JSONArr
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class JSONArr
    +extends java.lang.Object
    +
    A JSONArray is an ordered sequence of values. Its external text form is a + string wrapped in square brackets with commas separating the values. The + internal form is an object having get and opt + methods for accessing the values by index, and put methods for + adding or replacing values. The values can be any of these types: + Boolean, JSONArray, JSONObject, + Number, String, or the + JSONObject.NULL object. +

    + The constructor can convert a JSON text into a Java object. The + toString method converts to JSON text. +

    + A get method returns a value if one can be found, and throws an + exception if one cannot be found. An opt method returns a + default value instead of throwing an exception, and so is useful for + obtaining optional values. +

    + The generic get() and opt() methods return an + object which you can cast or query for type. There are also typed + get and opt methods that do type checking and type + coercion for you. +

    + The texts produced by the toString methods strictly conform to + JSON syntax rules. The constructors are more forgiving in the texts they will + accept: +

      +
    • An extra , (comma) may appear just + before the closing bracket.
    • +
    • The null value will be inserted when there + is , (comma) elision.
    • +
    • Strings may be quoted with ' (single + quote).
    • +
    • Strings do not need to be quoted at all if they do not begin with a quote + or single quote, and if they do not contain leading or trailing spaces, + and if they do not contain any of these characters: + { } [ ] / \ : , = ; # and if they do not look like numbers + and if they are not the reserved words true, + false, or null.
    • +
    • Values can be separated by ; (semicolon) as + well as by , (comma).
    • +
    • Numbers may have the + 0x- (hex) prefix.
    • +
    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + + + + + + + + + +
      Constructors 
      Constructor and Description
      JSONArr() +
      Construct an empty JSONArray.
      +
      JSONArr(java.util.Collection collection) +
      Construct a JSONArray from a Collection.
      +
      JSONArr(JSONTokener x) +
      Construct a JSONArray from a JSONTokener.
      +
      JSONArr(java.lang.Object array) +
      Construct a JSONArray from an array
      +
      JSONArr(java.lang.String source) +
      Construct a JSONArray from a source JSON text.
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      java.lang.Objectget(int index) +
      Get the object value associated with an index.
      +
      booleangetBoolean(int index) +
      Get the boolean value associated with an index.
      +
      doublegetDouble(int index) +
      Get the double value associated with an index.
      +
      intgetInt(int index) +
      Get the int value associated with an index.
      +
      JSONArrgetJSONArray(int index) +
      Get the JSONArray associated with an index.
      +
      JSONObjgetJSONObject(int index) +
      Get the JSONObject associated with an index.
      +
      longgetLong(int index) +
      Get the long value associated with an index.
      +
      java.lang.StringgetString(int index) +
      Get the string associated with an index.
      +
      booleanisNull(int index) +
      Determine if the value is null.
      +
      java.lang.Stringjoin(java.lang.String separator) +
      Make a string from the contents of this JSONArray.
      +
      intlength() +
      Get the number of elements in the JSONArray, included nulls.
      +
      java.lang.Objectopt(int index) +
      Get the optional object value associated with an index.
      +
      booleanoptBoolean(int index) +
      Get the optional boolean value associated with an index.
      +
      booleanoptBoolean(int index, + boolean defaultValue) +
      Get the optional boolean value associated with an index.
      +
      doubleoptDouble(int index) +
      Get the optional double value associated with an index.
      +
      doubleoptDouble(int index, + double defaultValue) +
      Get the optional double value associated with an index.
      +
      intoptInt(int index) +
      Get the optional int value associated with an index.
      +
      intoptInt(int index, + int defaultValue) +
      Get the optional int value associated with an index.
      +
      JSONArroptJSONArray(int index) +
      Get the optional JSONArray associated with an index.
      +
      JSONObjoptJSONObject(int index) +
      Get the optional JSONObject associated with an index.
      +
      longoptLong(int index) +
      Get the optional long value associated with an index.
      +
      longoptLong(int index, + long defaultValue) +
      Get the optional long value associated with an index.
      +
      java.lang.StringoptString(int index) +
      Get the optional string value associated with an index.
      +
      java.lang.StringoptString(int index, + java.lang.String defaultValue) +
      Get the optional string associated with an index.
      +
      JSONArrput(boolean value) +
      Append a boolean value.
      +
      JSONArrput(java.util.Collection value) +
      Put a value in the JSONArray, where the value will be a + JSONArray which is produced from a Collection.
      +
      JSONArrput(double value) +
      Append a double value.
      +
      JSONArrput(int value) +
      Append an int value.
      +
      JSONArrput(int index, + boolean value) +
      Put or replace a boolean value in the JSONArray.
      +
      JSONArrput(int index, + java.util.Collection value) +
      Put a value in the JSONArray, where the value will be a + JSONArray which is produced from a Collection.
      +
      JSONArrput(int index, + double value) +
      Put or replace a double value.
      +
      JSONArrput(int index, + int value) +
      Put or replace an int value.
      +
      JSONArrput(int index, + long value) +
      Put or replace a long value.
      +
      JSONArrput(int index, + java.util.Map value) +
      Put a value in the JSONArray, where the value will be a + JSONObject that is produced from a Map.
      +
      JSONArrput(int index, + java.lang.Object value) +
      Put or replace an object value in the JSONArray.
      +
      JSONArrput(long value) +
      Append an long value.
      +
      JSONArrput(java.util.Map value) +
      Put a value in the JSONArray, where the value will be a + JSONObject which is produced from a Map.
      +
      JSONArrput(java.lang.Object value) +
      Append an object value.
      +
      java.lang.Objectremove(int index) +
      Remove an index and close the hole.
      +
      JSONObjtoJSONObject(JSONArr names) +
      Produce a JSONObject by combining a JSONArray of names with the values + of this JSONArray.
      +
      java.lang.StringtoString() +
      Make a JSON text of this JSONArray.
      +
      java.lang.StringtoString(int indentFactor) +
      Make a prettyprinted JSON text of this JSONArray.
      +
      java.io.Writerwrite(java.io.Writer writer) +
      Write the contents of the JSONArray as JSON text to a writer.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        JSONArr

        +
        public JSONArr()
        +
        Construct an empty JSONArray.
        +
      • +
      + + + +
        +
      • +

        JSONArr

        +
        public JSONArr(JSONTokener x)
        +        throws JSONException
        +
        Construct a JSONArray from a JSONTokener.
        +
        Parameters:
        x - A JSONTokener
        +
        Throws:
        +
        JSONException - If there is a syntax error.
        +
      • +
      + + + +
        +
      • +

        JSONArr

        +
        public JSONArr(java.lang.String source)
        +        throws JSONException
        +
        Construct a JSONArray from a source JSON text.
        +
        Parameters:
        source - A string that begins with + [ (left bracket) + and ends with ] (right bracket).
        +
        Throws:
        +
        JSONException - If there is a syntax error.
        +
      • +
      + + + +
        +
      • +

        JSONArr

        +
        public JSONArr(java.util.Collection collection)
        +
        Construct a JSONArray from a Collection.
        +
        Parameters:
        collection - A Collection.
        +
      • +
      + + + +
        +
      • +

        JSONArr

        +
        public JSONArr(java.lang.Object array)
        +
        Construct a JSONArray from an array
        +
        Throws:
        +
        JSONException - If not an array.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        get

        +
        public java.lang.Object get(int index)
        +
        Get the object value associated with an index.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        An object value.
        +
        Throws:
        +
        JSONException - If there is no value for the index.
        +
      • +
      + + + +
        +
      • +

        getBoolean

        +
        public boolean getBoolean(int index)
        +                   throws JSONException
        +
        Get the boolean value associated with an index. + The string values "true" and "false" are converted to boolean.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        The truth.
        +
        Throws:
        +
        JSONException - If there is no value for the index or if the + value is not convertible to boolean.
        +
      • +
      + + + +
        +
      • +

        getDouble

        +
        public double getDouble(int index)
        +                 throws JSONException
        +
        Get the double value associated with an index.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        The value.
        +
        Throws:
        +
        JSONException - If the key is not found or if the value cannot + be converted to a number.
        +
      • +
      + + + +
        +
      • +

        getInt

        +
        public int getInt(int index)
        +           throws JSONException
        +
        Get the int value associated with an index.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        The value.
        +
        Throws:
        +
        JSONException - If the key is not found or if the value is not a number.
        +
      • +
      + + + +
        +
      • +

        getJSONArray

        +
        public JSONArr getJSONArray(int index)
        +                     throws JSONException
        +
        Get the JSONArray associated with an index.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        A JSONArray value.
        +
        Throws:
        +
        JSONException - If there is no value for the index. or if the + value is not a JSONArray
        +
      • +
      + + + +
        +
      • +

        getJSONObject

        +
        public JSONObj getJSONObject(int index)
        +
        Get the JSONObject associated with an index.
        +
        Parameters:
        index - subscript
        +
        Returns:
        A JSONObject value.
        +
        Throws:
        +
        JSONException - If there is no value for the index or if the + value is not a JSONObject
        +
      • +
      + + + +
        +
      • +

        getLong

        +
        public long getLong(int index)
        +             throws JSONException
        +
        Get the long value associated with an index.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        The value.
        +
        Throws:
        +
        JSONException - If the key is not found or if the value cannot + be converted to a number.
        +
      • +
      + + + +
        +
      • +

        getString

        +
        public java.lang.String getString(int index)
        +                           throws JSONException
        +
        Get the string associated with an index.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        A string value.
        +
        Throws:
        +
        JSONException - If there is no string value for the index.
        +
      • +
      + + + +
        +
      • +

        isNull

        +
        public boolean isNull(int index)
        +
        Determine if the value is null.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        true if the value at the index is null, or if there is no value.
        +
      • +
      + + + +
        +
      • +

        join

        +
        public java.lang.String join(java.lang.String separator)
        +                      throws JSONException
        +
        Make a string from the contents of this JSONArray. The + separator string is inserted between each element. + Warning: This method assumes that the data structure is acyclical.
        +
        Parameters:
        separator - A string that will be inserted between the elements.
        +
        Returns:
        a string.
        +
        Throws:
        +
        JSONException - If the array contains an invalid number.
        +
      • +
      + + + +
        +
      • +

        length

        +
        public int length()
        +
        Get the number of elements in the JSONArray, included nulls.
        +
        Returns:
        The length (or size).
        +
      • +
      + + + +
        +
      • +

        opt

        +
        public java.lang.Object opt(int index)
        +
        Get the optional object value associated with an index.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        An object value, or null if there is no + object at that index.
        +
      • +
      + + + +
        +
      • +

        optBoolean

        +
        public boolean optBoolean(int index)
        +
        Get the optional boolean value associated with an index. + It returns false if there is no value at that index, + or if the value is not Boolean.TRUE or the String "true".
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        The truth.
        +
      • +
      + + + +
        +
      • +

        optBoolean

        +
        public boolean optBoolean(int index,
        +                 boolean defaultValue)
        +
        Get the optional boolean value associated with an index. + It returns the defaultValue if there is no value at that index or if + it is not a Boolean or the String "true" or "false" (case insensitive).
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        defaultValue - A boolean default.
        +
        Returns:
        The truth.
        +
      • +
      + + + +
        +
      • +

        optDouble

        +
        public double optDouble(int index)
        +
        Get the optional double value associated with an index. + NaN is returned if there is no value for the index, + or if the value is not a number and cannot be converted to a number.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        The value.
        +
      • +
      + + + +
        +
      • +

        optDouble

        +
        public double optDouble(int index,
        +               double defaultValue)
        +
        Get the optional double value associated with an index. + The defaultValue is returned if there is no value for the index, + or if the value is not a number and cannot be converted to a number.
        +
        Parameters:
        index - subscript
        defaultValue - The default value.
        +
        Returns:
        The value.
        +
      • +
      + + + +
        +
      • +

        optInt

        +
        public int optInt(int index)
        +
        Get the optional int value associated with an index. + Zero is returned if there is no value for the index, + or if the value is not a number and cannot be converted to a number.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        The value.
        +
      • +
      + + + +
        +
      • +

        optInt

        +
        public int optInt(int index,
        +         int defaultValue)
        +
        Get the optional int value associated with an index. + The defaultValue is returned if there is no value for the index, + or if the value is not a number and cannot be converted to a number.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        defaultValue - The default value.
        +
        Returns:
        The value.
        +
      • +
      + + + +
        +
      • +

        optJSONArray

        +
        public JSONArr optJSONArray(int index)
        +
        Get the optional JSONArray associated with an index.
        +
        Parameters:
        index - subscript
        +
        Returns:
        A JSONArray value, or null if the index has no value, + or if the value is not a JSONArray.
        +
      • +
      + + + +
        +
      • +

        optJSONObject

        +
        public JSONObj optJSONObject(int index)
        +
        Get the optional JSONObject associated with an index. + Null is returned if the key is not found, or null if the index has + no value, or if the value is not a JSONObject.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        A JSONObject value.
        +
      • +
      + + + +
        +
      • +

        optLong

        +
        public long optLong(int index)
        +
        Get the optional long value associated with an index. + Zero is returned if there is no value for the index, + or if the value is not a number and cannot be converted to a number.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        The value.
        +
      • +
      + + + +
        +
      • +

        optLong

        +
        public long optLong(int index,
        +           long defaultValue)
        +
        Get the optional long value associated with an index. + The defaultValue is returned if there is no value for the index, + or if the value is not a number and cannot be converted to a number.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        defaultValue - The default value.
        +
        Returns:
        The value.
        +
      • +
      + + + +
        +
      • +

        optString

        +
        public java.lang.String optString(int index)
        +
        Get the optional string value associated with an index. It returns an + empty string if there is no value at that index. If the value + is not a string and is not null, then it is coverted to a string.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        +
        Returns:
        A String value.
        +
      • +
      + + + +
        +
      • +

        optString

        +
        public java.lang.String optString(int index,
        +                         java.lang.String defaultValue)
        +
        Get the optional string associated with an index. + The defaultValue is returned if the key is not found.
        +
        Parameters:
        index - The index must be between 0 and length() - 1.
        defaultValue - The default value.
        +
        Returns:
        A String value.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArr put(boolean value)
        +
        Append a boolean value. This increases the array's length by one.
        +
        Parameters:
        value - A boolean value.
        +
        Returns:
        this.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArr put(java.util.Collection value)
        +
        Put a value in the JSONArray, where the value will be a + JSONArray which is produced from a Collection.
        +
        Parameters:
        value - A Collection value.
        +
        Returns:
        this.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArr put(double value)
        +
        Append a double value. This increases the array's length by one.
        +
        Parameters:
        value - A double value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - if the value is not finite.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArr put(int value)
        +
        Append an int value. This increases the array's length by one.
        +
        Parameters:
        value - An int value.
        +
        Returns:
        this.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArr put(long value)
        +
        Append an long value. This increases the array's length by one.
        +
        Parameters:
        value - A long value.
        +
        Returns:
        this.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArr put(java.util.Map value)
        +
        Put a value in the JSONArray, where the value will be a + JSONObject which is produced from a Map.
        +
        Parameters:
        value - A Map value.
        +
        Returns:
        this.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArr put(java.lang.Object value)
        +
        Append an object value. This increases the array's length by one.
        +
        Parameters:
        value - An object value. The value should be a + Boolean, Double, Integer, JSONArray, JSONObject, Long, or String, or the + JSONObject.NULL object.
        +
        Returns:
        this.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArr put(int index,
        +          boolean value)
        +
        Put or replace a boolean value in the JSONArray. If the index is greater + than the length of the JSONArray, then null elements will be added as + necessary to pad it out.
        +
        Parameters:
        index - The subscript.
        value - A boolean value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the index is negative.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArr put(int index,
        +          java.util.Collection value)
        +
        Put a value in the JSONArray, where the value will be a + JSONArray which is produced from a Collection.
        +
        Parameters:
        index - The subscript.
        value - A Collection value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the index is negative or if the value is + not finite.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArr put(int index,
        +          double value)
        +
        Put or replace a double value. If the index is greater than the length of + the JSONArray, then null elements will be added as necessary to pad + it out.
        +
        Parameters:
        index - The subscript.
        value - A double value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the index is negative or if the value is + not finite.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArr put(int index,
        +          int value)
        +
        Put or replace an int value. If the index is greater than the length of + the JSONArray, then null elements will be added as necessary to pad + it out.
        +
        Parameters:
        index - The subscript.
        value - An int value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the index is negative.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArr put(int index,
        +          long value)
        +
        Put or replace a long value. If the index is greater than the length of + the JSONArray, then null elements will be added as necessary to pad + it out.
        +
        Parameters:
        index - The subscript.
        value - A long value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the index is negative.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArr put(int index,
        +          java.util.Map value)
        +
        Put a value in the JSONArray, where the value will be a + JSONObject that is produced from a Map.
        +
        Parameters:
        index - The subscript.
        value - The Map value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the index is negative or if the the value is + an invalid number.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONArr put(int index,
        +          java.lang.Object value)
        +
        Put or replace an object value in the JSONArray. If the index is greater + than the length of the JSONArray, then null elements will be added as + necessary to pad it out.
        +
        Parameters:
        index - The subscript.
        value - The value to put into the array. The value should be a + Boolean, Double, Integer, JSONArray, JSONObject, Long, or String, or the + JSONObject.NULL object.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the index is negative or if the the value is + an invalid number.
        +
      • +
      + + + +
        +
      • +

        remove

        +
        public java.lang.Object remove(int index)
        +
        Remove an index and close the hole.
        +
        Parameters:
        index - The index of the element to be removed.
        +
        Returns:
        The value that was associated with the index, + or null if there was no value.
        +
      • +
      + + + +
        +
      • +

        toJSONObject

        +
        public JSONObj toJSONObject(JSONArr names)
        +                     throws JSONException
        +
        Produce a JSONObject by combining a JSONArray of names with the values + of this JSONArray.
        +
        Parameters:
        names - A JSONArray containing a list of key strings. These will be + paired with the values.
        +
        Returns:
        A JSONObject, or null if there are no names or if this JSONArray + has no values.
        +
        Throws:
        +
        JSONException - If any of the names are null.
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public java.lang.String toString()
        +
        Make a JSON text of this JSONArray. For compactness, no + unnecessary whitespace is added. If it is not possible to produce a + syntactically correct JSON text then null will be returned instead. This + could occur if the array contains an invalid number. +

        + Warning: This method assumes that the data structure is acyclical.

        +
        +
        Overrides:
        +
        toString in class java.lang.Object
        +
        Returns:
        a printable, displayable, transmittable + representation of the array.
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public java.lang.String toString(int indentFactor)
        +                          throws JSONException
        +
        Make a prettyprinted JSON text of this JSONArray. + Warning: This method assumes that the data structure is acyclical.
        +
        Parameters:
        indentFactor - The number of spaces to add to each level of + indentation.
        +
        Returns:
        a printable, displayable, transmittable + representation of the object, beginning + with [ (left bracket) and ending + with ] (right bracket).
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        write

        +
        public java.io.Writer write(java.io.Writer writer)
        +
        Write the contents of the JSONArray as JSON text to a writer. + For compactness, no whitespace is added. +

        + Warning: This method assumes that the data structure is acyclical.

        +
        Returns:
        The writer.
        +
        Throws:
        +
        JSONException
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.6/reference/org/json/JSONException.html b/distribution/json4processing-0.1.6/reference/org/json/JSONException.html new file mode 100644 index 000000000..f17f05ae3 --- /dev/null +++ b/distribution/json4processing-0.1.6/reference/org/json/JSONException.html @@ -0,0 +1,298 @@ + + + + + +JSONException (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class JSONException

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • java.lang.Throwable
    • +
    • +
        +
      • java.lang.Exception
      • +
      • +
          +
        • org.json.JSONException
        • +
        +
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.io.Serializable
    +
    +
    +
    +
    public class JSONException
    +extends java.lang.Exception
    +
    The JSONException is thrown by the JSON.org classes when things are amiss.
    +
    Author:
    +
    JSON.org
    +
    See Also:
    Serialized Form
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + +
      Constructors 
      Constructor and Description
      JSONException(java.lang.String message) +
      Constructs a JSONException with an explanatory message.
      +
      JSONException(java.lang.Throwable cause) 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      java.lang.ThrowablegetCause() 
      +
        +
      • + + +

        Methods inherited from class java.lang.Throwable

        +addSuppressed, fillInStackTrace, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
      • +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        JSONException

        +
        public JSONException(java.lang.String message)
        +
        Constructs a JSONException with an explanatory message.
        +
        Parameters:
        message - Detail about the reason for the exception.
        +
      • +
      + + + +
        +
      • +

        JSONException

        +
        public JSONException(java.lang.Throwable cause)
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getCause

        +
        public java.lang.Throwable getCause()
        +
        +
        Overrides:
        +
        getCause in class java.lang.Throwable
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.6/reference/org/json/JSONML.html b/distribution/json4processing-0.1.6/reference/org/json/JSONML.html new file mode 100644 index 000000000..f712a28a7 --- /dev/null +++ b/distribution/json4processing-0.1.6/reference/org/json/JSONML.html @@ -0,0 +1,404 @@ + + + + + +JSONML (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class JSONML

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.json.JSONML
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class JSONML
    +extends java.lang.Object
    +
    This provides static methods to convert an XML text into a JSONArray or + JSONObject, and to covert a JSONArray or JSONObject into an XML text using + the JsonML transform.
    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      JSONML() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      static JSONArrtoJSONArray(java.lang.String string) +
      Convert a well-formed (but not necessarily valid) XML string into a + JSONArray using the JsonML transform.
      +
      static JSONArrtoJSONArray(XMLTokener x) +
      Convert a well-formed (but not necessarily valid) XML string into a + JSONArray using the JsonML transform.
      +
      static JSONObjtoJSONObject(java.lang.String string) +
      Convert a well-formed (but not necessarily valid) XML string into a + JSONObject using the JsonML transform.
      +
      static JSONObjtoJSONObject(XMLTokener x) +
      Convert a well-formed (but not necessarily valid) XML string into a + JSONObject using the JsonML transform.
      +
      static java.lang.StringtoString(JSONArr ja) +
      Reverse the JSONML transformation, making an XML text from a JSONArray.
      +
      static java.lang.StringtoString(JSONObj jo) +
      Reverse the JSONML transformation, making an XML text from a JSONObject.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        JSONML

        +
        public JSONML()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        toJSONArray

        +
        public static JSONArr toJSONArray(java.lang.String string)
        +                           throws JSONException
        +
        Convert a well-formed (but not necessarily valid) XML string into a + JSONArray using the JsonML transform. Each XML tag is represented as + a JSONArray in which the first element is the tag name. If the tag has + attributes, then the second element will be JSONObject containing the + name/value pairs. If the tag contains children, then strings and + JSONArrays will represent the child tags. + Comments, prologs, DTDs, and <[ [ ]]> are ignored.
        +
        Parameters:
        string - The source string.
        +
        Returns:
        A JSONArray containing the structured data from the XML string.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toJSONArray

        +
        public static JSONArr toJSONArray(XMLTokener x)
        +                           throws JSONException
        +
        Convert a well-formed (but not necessarily valid) XML string into a + JSONArray using the JsonML transform. Each XML tag is represented as + a JSONArray in which the first element is the tag name. If the tag has + attributes, then the second element will be JSONObject containing the + name/value pairs. If the tag contains children, then strings and + JSONArrays will represent the child content and tags. + Comments, prologs, DTDs, and <[ [ ]]> are ignored.
        +
        Parameters:
        x - An XMLTokener.
        +
        Returns:
        A JSONArray containing the structured data from the XML string.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toJSONObject

        +
        public static JSONObj toJSONObject(XMLTokener x)
        +                            throws JSONException
        +
        Convert a well-formed (but not necessarily valid) XML string into a + JSONObject using the JsonML transform. Each XML tag is represented as + a JSONObject with a "tagName" property. If the tag has attributes, then + the attributes will be in the JSONObject as properties. If the tag + contains children, the object will have a "childNodes" property which + will be an array of strings and JsonML JSONObjects. + + Comments, prologs, DTDs, and <[ [ ]]> are ignored.
        +
        Parameters:
        x - An XMLTokener of the XML source text.
        +
        Returns:
        A JSONObject containing the structured data from the XML string.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toJSONObject

        +
        public static JSONObj toJSONObject(java.lang.String string)
        +                            throws JSONException
        +
        Convert a well-formed (but not necessarily valid) XML string into a + JSONObject using the JsonML transform. Each XML tag is represented as + a JSONObject with a "tagName" property. If the tag has attributes, then + the attributes will be in the JSONObject as properties. If the tag + contains children, the object will have a "childNodes" property which + will be an array of strings and JsonML JSONObjects. + + Comments, prologs, DTDs, and <[ [ ]]> are ignored.
        +
        Parameters:
        string - The XML source text.
        +
        Returns:
        A JSONObject containing the structured data from the XML string.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static java.lang.String toString(JSONArr ja)
        +                                 throws JSONException
        +
        Reverse the JSONML transformation, making an XML text from a JSONArray.
        +
        Parameters:
        ja - A JSONArray.
        +
        Returns:
        An XML string.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static java.lang.String toString(JSONObj jo)
        +                                 throws JSONException
        +
        Reverse the JSONML transformation, making an XML text from a JSONObject. + The JSONObject must contain a "tagName" property. If it has children, + then it must have a "childNodes" property containing an array of objects. + The other properties are attributes with string values.
        +
        Parameters:
        jo - A JSONObject.
        +
        Returns:
        An XML string.
        +
        Throws:
        +
        JSONException
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.6/reference/org/json/JSONObj.html b/distribution/json4processing-0.1.6/reference/org/json/JSONObj.html new file mode 100644 index 000000000..470fac65d --- /dev/null +++ b/distribution/json4processing-0.1.6/reference/org/json/JSONObj.html @@ -0,0 +1,1626 @@ + + + + + +JSONObj (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class JSONObj

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.json.JSONObj
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class JSONObj
    +extends java.lang.Object
    +
    A JSONObject is an unordered collection of name/value pairs. Its external + form is a string wrapped in curly braces with colons between the names and + values, and commas between the values and names. The internal form is an + object having get and opt methods for accessing the + values by name, and put methods for adding or replacing values + by name. The values can be any of these types: Boolean, + JSONArray, JSONObject, Number, + String, or the JSONObject.NULL object. A JSONObject + constructor can be used to convert an external form JSON text into an + internal form whose values can be retrieved with the get and + opt methods, or to convert values into a JSON text using the + put and toString methods. A get method + returns a value if one can be found, and throws an exception if one cannot be + found. An opt method returns a default value instead of throwing + an exception, and so is useful for obtaining optional values. +

    + The generic get() and opt() methods return an + object, which you can cast or query for type. There are also typed + get and opt methods that do type checking and type + coercion for you. The opt methods differ from the get methods in that they do + not throw. Instead, they return a specified value, such as null. +

    + The put methods add or replace values in an object. For example, + +

    + myString = new JSONObject().put("JSON", "Hello, World!").toString();
    + 
    + + produces the string {"JSON": "Hello, World"}. +

    + The texts produced by the toString methods strictly conform to + the JSON syntax rules. The constructors are more forgiving in the texts they + will accept: +

      +
    • An extra , (comma) may appear just + before the closing brace.
    • +
    • Strings may be quoted with ' (single + quote).
    • +
    • Strings do not need to be quoted at all if they do not begin with a quote + or single quote, and if they do not contain leading or trailing spaces, and + if they do not contain any of these characters: + { } [ ] / \ : , = ; # and if they do not look like numbers and + if they are not the reserved words true, false, or + null.
    • +
    • Keys can be followed by = or => as well as by + :.
    • +
    • Values can be followed by ; (semicolon) as + well as by , (comma).
    • +
    • Numbers may have the 0x- (hex) prefix.
    • +
    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Summary

      + + + + + + + + + + +
      Fields 
      Modifier and TypeField and Description
      static java.lang.ObjectNULL +
      It is sometimes more convenient and less ambiguous to have a + NULL object than to use Java's null value.
      +
      +
    • +
    + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Constructors 
      Constructor and Description
      JSONObj() +
      Construct an empty JSONObject.
      +
      JSONObj(JSONObj jo, + java.lang.String[] names) +
      Construct a JSONObject from a subset of another JSONObject.
      +
      JSONObj(JSONTokener x) +
      Construct a JSONObject from a JSONTokener.
      +
      JSONObj(java.util.Map map) +
      Construct a JSONObject from a Map.
      +
      JSONObj(java.lang.Object bean) +
      Construct a JSONObject from an Object using bean getters.
      +
      JSONObj(java.lang.Object object, + java.lang.String[] names) +
      Construct a JSONObject from an Object, using reflection to find the + public members.
      +
      JSONObj(java.lang.String source) +
      Construct a JSONObject from a source JSON text string.
      +
      JSONObj(java.lang.String baseName, + java.util.Locale locale) +
      Construct a JSONObject from a ResourceBundle.
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      JSONObjaccumulate(java.lang.String key, + java.lang.Object value) +
      Accumulate values under a key.
      +
      JSONObjappend(java.lang.String key, + java.lang.Object value) +
      Append values to the array under a key.
      +
      static java.lang.StringdoubleToString(double d) +
      Produce a string from a double.
      +
      java.lang.Objectget(java.lang.String key) +
      Get the value object associated with a key.
      +
      booleangetBoolean(java.lang.String key) +
      Get the boolean value associated with a key.
      +
      doublegetDouble(java.lang.String key) +
      Get the double value associated with a key.
      +
      intgetInt(java.lang.String key) +
      Get the int value associated with a key.
      +
      JSONArrgetJSONArray(java.lang.String key) +
      Get the JSONArray value associated with a key.
      +
      JSONObjgetJSONObject(java.lang.String key) +
      Get the JSONObject value associated with a key.
      +
      longgetLong(java.lang.String key) +
      Get the long value associated with a key.
      +
      static java.lang.String[]getNames(JSONObj jo) +
      Get an array of field names from a JSONObject.
      +
      static java.lang.String[]getNames(java.lang.Object object) +
      Get an array of field names from an Object.
      +
      java.lang.StringgetString(java.lang.String key) +
      Get the string associated with a key.
      +
      booleanhas(java.lang.String key) +
      Determine if the JSONObject contains a specific key.
      +
      JSONObjincrement(java.lang.String key) +
      Increment a property of a JSONObject.
      +
      booleanisNull(java.lang.String key) +
      Determine if the value associated with the key is null or if there is no + value.
      +
      java.util.Iteratorkeys() +
      Get an enumeration of the keys of the JSONObject.
      +
      intlength() +
      Get the number of keys stored in the JSONObject.
      +
      JSONArrnames() +
      Produce a JSONArray containing the names of the elements of this + JSONObject.
      +
      static java.lang.StringnumberToString(java.lang.Number number) +
      Produce a string from a Number.
      +
      java.lang.Objectopt(java.lang.String key) +
      Get an optional value associated with a key.
      +
      booleanoptBoolean(java.lang.String key) +
      Get an optional boolean associated with a key.
      +
      booleanoptBoolean(java.lang.String key, + boolean defaultValue) +
      Get an optional boolean associated with a key.
      +
      doubleoptDouble(java.lang.String key) +
      Get an optional double associated with a key, or NaN if there is no such + key or if its value is not a number.
      +
      doubleoptDouble(java.lang.String key, + double defaultValue) +
      Get an optional double associated with a key, or the defaultValue if + there is no such key or if its value is not a number.
      +
      intoptInt(java.lang.String key) +
      Get an optional int value associated with a key, or zero if there is no + such key or if the value is not a number.
      +
      intoptInt(java.lang.String key, + int defaultValue) +
      Get an optional int value associated with a key, or the default if there + is no such key or if the value is not a number.
      +
      JSONArroptJSONArray(java.lang.String key) +
      Get an optional JSONArray associated with a key.
      +
      JSONObjoptJSONObject(java.lang.String key) +
      Get an optional JSONObject associated with a key.
      +
      longoptLong(java.lang.String key) +
      Get an optional long value associated with a key, or zero if there is no + such key or if the value is not a number.
      +
      longoptLong(java.lang.String key, + long defaultValue) +
      Get an optional long value associated with a key, or the default if there + is no such key or if the value is not a number.
      +
      java.lang.StringoptString(java.lang.String key) +
      Get an optional string associated with a key.
      +
      java.lang.StringoptString(java.lang.String key, + java.lang.String defaultValue) +
      Get an optional string associated with a key.
      +
      JSONObjput(java.lang.String key, + boolean value) +
      Put a key/boolean pair in the JSONObject.
      +
      JSONObjput(java.lang.String key, + java.util.Collection value) +
      Put a key/value pair in the JSONObject, where the value will be a + JSONArray which is produced from a Collection.
      +
      JSONObjput(java.lang.String key, + double value) +
      Put a key/double pair in the JSONObject.
      +
      JSONObjput(java.lang.String key, + int value) +
      Put a key/int pair in the JSONObject.
      +
      JSONObjput(java.lang.String key, + long value) +
      Put a key/long pair in the JSONObject.
      +
      JSONObjput(java.lang.String key, + java.util.Map value) +
      Put a key/value pair in the JSONObject, where the value will be a + JSONObject which is produced from a Map.
      +
      JSONObjput(java.lang.String key, + java.lang.Object value) +
      Put a key/value pair in the JSONObject.
      +
      JSONObjputOnce(java.lang.String key, + java.lang.Object value) +
      Put a key/value pair in the JSONObject, but only if the key and the value + are both non-null, and only if there is not already a member with that + name.
      +
      JSONObjputOpt(java.lang.String key, + java.lang.Object value) +
      Put a key/value pair in the JSONObject, but only if the key and the value + are both non-null.
      +
      static java.lang.Stringquote(java.lang.String string) +
      Produce a string in double quotes with backslash sequences in all the + right places.
      +
      java.lang.Objectremove(java.lang.String key) +
      Remove a name and its value, if present.
      +
      static java.lang.ObjectstringToValue(java.lang.String string) +
      Try to convert a string into a number, boolean, or null.
      +
      static voidtestValidity(java.lang.Object o) +
      Throw an exception if the object is a NaN or infinite number.
      +
      JSONArrtoJSONArray(JSONArr names) +
      Produce a JSONArray containing the values of the members of this + JSONObject.
      +
      java.lang.StringtoString() +
      Make a JSON text of this JSONObject.
      +
      java.lang.StringtoString(int indentFactor) +
      Make a prettyprinted JSON text of this JSONObject.
      +
      static java.lang.StringvalueToString(java.lang.Object value) +
      Make a JSON text of an Object value.
      +
      static java.lang.Objectwrap(java.lang.Object object) +
      Wrap an object, if necessary.
      +
      java.io.Writerwrite(java.io.Writer writer) +
      Write the contents of the JSONObject as JSON text to a writer.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        NULL

        +
        public static final java.lang.Object NULL
        +
        It is sometimes more convenient and less ambiguous to have a + NULL object than to use Java's null value. + JSONObject.NULL.equals(null) returns true. + JSONObject.NULL.toString() returns "null".
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        JSONObj

        +
        public JSONObj()
        +
        Construct an empty JSONObject.
        +
      • +
      + + + +
        +
      • +

        JSONObj

        +
        public JSONObj(JSONObj jo,
        +       java.lang.String[] names)
        +
        Construct a JSONObject from a subset of another JSONObject. An array of + strings is used to identify the keys that should be copied. Missing keys + are ignored.
        +
        Parameters:
        jo - A JSONObject.
        names - An array of strings.
        +
        Throws:
        +
        JSONException
        +
        JSONException - If a value is a non-finite number or if a name is + duplicated.
        +
      • +
      + + + +
        +
      • +

        JSONObj

        +
        public JSONObj(JSONTokener x)
        +
        Construct a JSONObject from a JSONTokener.
        +
        Parameters:
        x - A JSONTokener object containing the source string.
        +
        Throws:
        +
        JSONException - If there is a syntax error in the source string or a + duplicated key.
        +
      • +
      + + + +
        +
      • +

        JSONObj

        +
        public JSONObj(java.util.Map map)
        +
        Construct a JSONObject from a Map.
        +
        Parameters:
        map - A map object that can be used to initialize the contents of + the JSONObject.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        JSONObj

        +
        public JSONObj(java.lang.Object bean)
        +
        Construct a JSONObject from an Object using bean getters. It reflects on + all of the public methods of the object. For each of the methods with no + parameters and a name starting with "get" or + "is" followed by an uppercase letter, the method is invoked, + and a key and the value returned from the getter method are put into the + new JSONObject. + + The key is formed by removing the "get" or "is" + prefix. If the second remaining character is not upper case, then the + first character is converted to lower case. + + For example, if an object has a method named "getName", and + if the result of calling object.getName() is + "Larry Fine", then the JSONObject will contain + "name": "Larry Fine".
        +
        Parameters:
        bean - An object that has getter methods that should be used to make + a JSONObject.
        +
      • +
      + + + +
        +
      • +

        JSONObj

        +
        public JSONObj(java.lang.Object object,
        +       java.lang.String[] names)
        +
        Construct a JSONObject from an Object, using reflection to find the + public members. The resulting JSONObject's keys will be the strings from + the names array, and the values will be the field values associated with + those keys in the object. If a key is not found or not visible, then it + will not be copied into the new JSONObject.
        +
        Parameters:
        object - An object that has fields that should be used to make a + JSONObject.
        names - An array of strings, the names of the fields to be obtained + from the object.
        +
      • +
      + + + +
        +
      • +

        JSONObj

        +
        public JSONObj(java.lang.String source)
        +
        Construct a JSONObject from a source JSON text string. This is the most + commonly used JSONObject constructor.
        +
        Parameters:
        source - A string beginning with { (left + brace) and ending with } +  (right brace).
        +
        Throws:
        +
        JSONException - If there is a syntax error in the source string or a + duplicated key.
        +
      • +
      + + + +
        +
      • +

        JSONObj

        +
        public JSONObj(java.lang.String baseName,
        +       java.util.Locale locale)
        +
        Construct a JSONObject from a ResourceBundle.
        +
        Parameters:
        baseName - The ResourceBundle base name.
        locale - The Locale to load the ResourceBundle for.
        +
        Throws:
        +
        JSONException - If any JSONExceptions are detected.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        accumulate

        +
        public JSONObj accumulate(java.lang.String key,
        +                 java.lang.Object value)
        +
        Accumulate values under a key. It is similar to the put method except + that if there is already an object stored under the key then a JSONArray + is stored under the key to hold all of the accumulated values. If there + is already a JSONArray, then the new value is appended to it. In + contrast, the put method replaces the previous value. + + If only one value is accumulated that is not a JSONArray, then the result + will be the same as using put. But if multiple values are accumulated, + then the result will be like append.
        +
        Parameters:
        key - A key string.
        value - An object to be accumulated under the key.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the value is an invalid number or if the key is null.
        +
      • +
      + + + +
        +
      • +

        append

        +
        public JSONObj append(java.lang.String key,
        +             java.lang.Object value)
        +
        Append values to the array under a key. If the key does not exist in the + JSONObject, then the key is put in the JSONObject with its value being a + JSONArray containing the value parameter. If the key was already + associated with a JSONArray, then the value parameter is appended to it.
        +
        Parameters:
        key - A key string.
        value - An object to be accumulated under the key.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the key is null or if the current value associated with + the key is not a JSONArray.
        +
      • +
      + + + +
        +
      • +

        doubleToString

        +
        public static java.lang.String doubleToString(double d)
        +
        Produce a string from a double. The string "null" will be returned if the + number is not finite.
        +
        Parameters:
        d - A double.
        +
        Returns:
        A String.
        +
      • +
      + + + +
        +
      • +

        get

        +
        public java.lang.Object get(java.lang.String key)
        +
        Get the value object associated with a key.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        The object associated with the key.
        +
        Throws:
        +
        JSONException - if the key is not found.
        +
      • +
      + + + +
        +
      • +

        getBoolean

        +
        public boolean getBoolean(java.lang.String key)
        +
        Get the boolean value associated with a key.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        The truth. (False if it failes to find the value)
        +
        Throws:
        +
        JSONException - if the value is not a Boolean or the String "true" or + "false".
        +
      • +
      + + + +
        +
      • +

        getDouble

        +
        public double getDouble(java.lang.String key)
        +
        Get the double value associated with a key.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        The numeric value. -1 if it failes to find the value
        +
        Throws:
        +
        JSONException - if the key is not found or if the value is not a Number + object and cannot be converted to a number.
        +
      • +
      + + + +
        +
      • +

        getInt

        +
        public int getInt(java.lang.String key)
        +
        Get the int value associated with a key.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        The integer value. (-1 if it failes to get the integer)
        +
        Throws:
        +
        JSONException - if the key is not found or if the value cannot be converted + to an integer.
        +
      • +
      + + + +
        +
      • +

        getJSONArray

        +
        public JSONArr getJSONArray(java.lang.String key)
        +
        Get the JSONArray value associated with a key.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        A JSONArray which is the value. (null if failes to find the array)
        +
        Throws:
        +
        JSONException - if the key is not found or if the value is not a JSONArray.
        +
      • +
      + + + +
        +
      • +

        getJSONObject

        +
        public JSONObj getJSONObject(java.lang.String key)
        +
        Get the JSONObject value associated with a key.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        A JSONObject which is the value.
        +
        Throws:
        +
        JSONException - if the key is not found or if the value is not a JSONObject.
        +
      • +
      + + + +
        +
      • +

        getLong

        +
        public long getLong(java.lang.String key)
        +
        Get the long value associated with a key.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        The long value. (-1 if it failes)
        +
        Throws:
        +
        JSONException - if the key is not found or if the value cannot be converted + to a long.
        +
      • +
      + + + +
        +
      • +

        getNames

        +
        public static java.lang.String[] getNames(JSONObj jo)
        +
        Get an array of field names from a JSONObject.
        +
        Returns:
        An array of field names, or null if there are no names.
        +
      • +
      + + + +
        +
      • +

        getNames

        +
        public static java.lang.String[] getNames(java.lang.Object object)
        +
        Get an array of field names from an Object.
        +
        Returns:
        An array of field names, or null if there are no names.
        +
      • +
      + + + +
        +
      • +

        getString

        +
        public java.lang.String getString(java.lang.String key)
        +
        Get the string associated with a key.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        A string which is the value. (empty string if it fails)
        +
        Throws:
        +
        JSONException - if there is no string value for the key.
        +
      • +
      + + + +
        +
      • +

        has

        +
        public boolean has(java.lang.String key)
        +
        Determine if the JSONObject contains a specific key.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        true if the key exists in the JSONObject.
        +
      • +
      + + + +
        +
      • +

        increment

        +
        public JSONObj increment(java.lang.String key)
        +
        Increment a property of a JSONObject. If there is no such property, + create one with a value of 1. If there is such a property, and if it is + an Integer, Long, Double, or Float, then add one to it.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If there is already a property with this name that is not an + Integer, Long, Double, or Float.
        +
      • +
      + + + +
        +
      • +

        isNull

        +
        public boolean isNull(java.lang.String key)
        +
        Determine if the value associated with the key is null or if there is no + value.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        true if there is no value associated with the key or if the value + is the JSONObject.NULL object.
        +
      • +
      + + + +
        +
      • +

        keys

        +
        public java.util.Iterator keys()
        +
        Get an enumeration of the keys of the JSONObject.
        +
        Returns:
        An iterator of the keys.
        +
      • +
      + + + +
        +
      • +

        length

        +
        public int length()
        +
        Get the number of keys stored in the JSONObject.
        +
        Returns:
        The number of keys in the JSONObject.
        +
      • +
      + + + +
        +
      • +

        names

        +
        public JSONArr names()
        +
        Produce a JSONArray containing the names of the elements of this + JSONObject.
        +
        Returns:
        A JSONArray containing the key strings, or null if the JSONObject + is empty.
        +
      • +
      + + + +
        +
      • +

        numberToString

        +
        public static java.lang.String numberToString(java.lang.Number number)
        +
        Produce a string from a Number.
        +
        Parameters:
        number - A Number
        +
        Returns:
        A String.
        +
        Throws:
        +
        JSONException - If n is a non-finite number.
        +
      • +
      + + + +
        +
      • +

        opt

        +
        public java.lang.Object opt(java.lang.String key)
        +
        Get an optional value associated with a key.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        An object which is the value, or null if there is no value.
        +
      • +
      + + + +
        +
      • +

        optBoolean

        +
        public boolean optBoolean(java.lang.String key)
        +
        Get an optional boolean associated with a key. It returns false if there + is no such key, or if the value is not Boolean.TRUE or the String "true".
        +
        Parameters:
        key - A key string.
        +
        Returns:
        The truth.
        +
      • +
      + + + +
        +
      • +

        optBoolean

        +
        public boolean optBoolean(java.lang.String key,
        +                 boolean defaultValue)
        +
        Get an optional boolean associated with a key. It returns the + defaultValue if there is no such key, or if it is not a Boolean or the + String "true" or "false" (case insensitive).
        +
        Parameters:
        key - A key string.
        defaultValue - The default.
        +
        Returns:
        The truth.
        +
      • +
      + + + +
        +
      • +

        optDouble

        +
        public double optDouble(java.lang.String key)
        +
        Get an optional double associated with a key, or NaN if there is no such + key or if its value is not a number. If the value is a string, an attempt + will be made to evaluate it as a number.
        +
        Parameters:
        key - A string which is the key.
        +
        Returns:
        An object which is the value.
        +
      • +
      + + + +
        +
      • +

        optDouble

        +
        public double optDouble(java.lang.String key,
        +               double defaultValue)
        +
        Get an optional double associated with a key, or the defaultValue if + there is no such key or if its value is not a number. If the value is a + string, an attempt will be made to evaluate it as a number.
        +
        Parameters:
        key - A key string.
        defaultValue - The default.
        +
        Returns:
        An object which is the value.
        +
      • +
      + + + +
        +
      • +

        optInt

        +
        public int optInt(java.lang.String key)
        +
        Get an optional int value associated with a key, or zero if there is no + such key or if the value is not a number. If the value is a string, an + attempt will be made to evaluate it as a number.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        An object which is the value.
        +
      • +
      + + + +
        +
      • +

        optInt

        +
        public int optInt(java.lang.String key,
        +         int defaultValue)
        +
        Get an optional int value associated with a key, or the default if there + is no such key or if the value is not a number. If the value is a string, + an attempt will be made to evaluate it as a number.
        +
        Parameters:
        key - A key string.
        defaultValue - The default.
        +
        Returns:
        An object which is the value.
        +
      • +
      + + + +
        +
      • +

        optJSONArray

        +
        public JSONArr optJSONArray(java.lang.String key)
        +
        Get an optional JSONArray associated with a key. It returns null if there + is no such key, or if its value is not a JSONArray.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        A JSONArray which is the value.
        +
      • +
      + + + +
        +
      • +

        optJSONObject

        +
        public JSONObj optJSONObject(java.lang.String key)
        +
        Get an optional JSONObject associated with a key. It returns null if + there is no such key, or if its value is not a JSONObject.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        A JSONObject which is the value.
        +
      • +
      + + + +
        +
      • +

        optLong

        +
        public long optLong(java.lang.String key)
        +
        Get an optional long value associated with a key, or zero if there is no + such key or if the value is not a number. If the value is a string, an + attempt will be made to evaluate it as a number.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        An object which is the value.
        +
      • +
      + + + +
        +
      • +

        optLong

        +
        public long optLong(java.lang.String key,
        +           long defaultValue)
        +
        Get an optional long value associated with a key, or the default if there + is no such key or if the value is not a number. If the value is a string, + an attempt will be made to evaluate it as a number.
        +
        Parameters:
        key - A key string.
        defaultValue - The default.
        +
        Returns:
        An object which is the value.
        +
      • +
      + + + +
        +
      • +

        optString

        +
        public java.lang.String optString(java.lang.String key)
        +
        Get an optional string associated with a key. It returns an empty string + if there is no such key. If the value is not a string and is not null, + then it is converted to a string.
        +
        Parameters:
        key - A key string.
        +
        Returns:
        A string which is the value.
        +
      • +
      + + + +
        +
      • +

        optString

        +
        public java.lang.String optString(java.lang.String key,
        +                         java.lang.String defaultValue)
        +
        Get an optional string associated with a key. It returns the defaultValue + if there is no such key.
        +
        Parameters:
        key - A key string.
        defaultValue - The default.
        +
        Returns:
        A string which is the value.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONObj put(java.lang.String key,
        +          boolean value)
        +
        Put a key/boolean pair in the JSONObject.
        +
        Parameters:
        key - A key string.
        value - A boolean which is the value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the key is null.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONObj put(java.lang.String key,
        +          java.util.Collection value)
        +
        Put a key/value pair in the JSONObject, where the value will be a + JSONArray which is produced from a Collection.
        +
        Parameters:
        key - A key string.
        value - A Collection value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONObj put(java.lang.String key,
        +          double value)
        +
        Put a key/double pair in the JSONObject.
        +
        Parameters:
        key - A key string.
        value - A double which is the value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the key is null or if the number is invalid.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONObj put(java.lang.String key,
        +          int value)
        +
        Put a key/int pair in the JSONObject.
        +
        Parameters:
        key - A key string.
        value - An int which is the value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the key is null.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONObj put(java.lang.String key,
        +          long value)
        +
        Put a key/long pair in the JSONObject.
        +
        Parameters:
        key - A key string.
        value - A long which is the value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the key is null.
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONObj put(java.lang.String key,
        +          java.util.Map value)
        +
        Put a key/value pair in the JSONObject, where the value will be a + JSONObject which is produced from a Map.
        +
        Parameters:
        key - A key string.
        value - A Map value.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        put

        +
        public JSONObj put(java.lang.String key,
        +          java.lang.Object value)
        +
        Put a key/value pair in the JSONObject. If the value is null, then the + key will be removed from the JSONObject if it is present.
        +
        Parameters:
        key - A key string.
        value - An object which is the value. It should be of one of these + types: Boolean, Double, Integer, JSONArray, JSONObject, Long, + String, or the JSONObject.NULL object.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the value is non-finite number or if the key is null.
        +
      • +
      + + + +
        +
      • +

        putOnce

        +
        public JSONObj putOnce(java.lang.String key,
        +              java.lang.Object value)
        +
        Put a key/value pair in the JSONObject, but only if the key and the value + are both non-null, and only if there is not already a member with that + name.
        +
        Parameters:
        key -
        value -
        +
        Returns:
        his.
        +
        Throws:
        +
        JSONException - if the key is a duplicate
        +
      • +
      + + + +
        +
      • +

        putOpt

        +
        public JSONObj putOpt(java.lang.String key,
        +             java.lang.Object value)
        +
        Put a key/value pair in the JSONObject, but only if the key and the value + are both non-null.
        +
        Parameters:
        key - A key string.
        value - An object which is the value. It should be of one of these + types: Boolean, Double, Integer, JSONArray, JSONObject, Long, + String, or the JSONObject.NULL object.
        +
        Returns:
        this.
        +
        Throws:
        +
        JSONException - If the value is a non-finite number.
        +
      • +
      + + + +
        +
      • +

        quote

        +
        public static java.lang.String quote(java.lang.String string)
        +
        Produce a string in double quotes with backslash sequences in all the + right places. A backslash will be inserted within +
        Parameters:
        string - A String
        +
        Returns:
        A String correctly formatted for insertion in a JSON text.
        +
      • +
      + + + +
        +
      • +

        remove

        +
        public java.lang.Object remove(java.lang.String key)
        +
        Remove a name and its value, if present.
        +
        Parameters:
        key - The name to be removed.
        +
        Returns:
        The value that was associated with the name, or null if there was + no value.
        +
      • +
      + + + +
        +
      • +

        stringToValue

        +
        public static java.lang.Object stringToValue(java.lang.String string)
        +
        Try to convert a string into a number, boolean, or null. If the string + can't be converted, return the string.
        +
        Parameters:
        string - A String.
        +
        Returns:
        A simple JSON value.
        +
      • +
      + + + +
        +
      • +

        testValidity

        +
        public static void testValidity(java.lang.Object o)
        +                         throws JSONException
        +
        Throw an exception if the object is a NaN or infinite number.
        +
        Parameters:
        o - The object to test.
        +
        Throws:
        +
        JSONException - If o is a non-finite number.
        +
      • +
      + + + +
        +
      • +

        toJSONArray

        +
        public JSONArr toJSONArray(JSONArr names)
        +                    throws JSONException
        +
        Produce a JSONArray containing the values of the members of this + JSONObject.
        +
        Parameters:
        names - A JSONArray containing a list of key strings. This determines + the sequence of the values in the result.
        +
        Returns:
        A JSONArray of values.
        +
        Throws:
        +
        JSONException - If any of the values are non-finite numbers.
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public java.lang.String toString()
        +
        Make a JSON text of this JSONObject. For compactness, no whitespace is + added. If this would not result in a syntactically correct JSON text, + then null will be returned instead. +

        + Warning: This method assumes that the data structure is acyclical.

        +
        +
        Overrides:
        +
        toString in class java.lang.Object
        +
        Returns:
        a printable, displayable, portable, transmittable representation + of the object, beginning with { (left + brace) and ending with } (right + brace).
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public java.lang.String toString(int indentFactor)
        +
        Make a prettyprinted JSON text of this JSONObject. +

        + Warning: This method assumes that the data structure is acyclical.

        +
        Parameters:
        indentFactor - The number of spaces to add to each level of indentation.
        +
        Returns:
        a printable, displayable, portable, transmittable representation + of the object, beginning with { (left + brace) and ending with } (right + brace).
        +
        Throws:
        +
        JSONException - If the object contains an invalid number.
        +
      • +
      + + + +
        +
      • +

        valueToString

        +
        public static java.lang.String valueToString(java.lang.Object value)
        +
        Make a JSON text of an Object value. If the object has an + value.toJSONString() method, then that method will be used to produce the + JSON text. The method is required to produce a strictly conforming text. + If the object does not contain a toJSONString method (which is the most + common case), then a text will be produced by other means. If the value + is an array or Collection, then a JSONArray will be made from it and its + toJSONString method will be called. If the value is a MAP, then a + JSONObject will be made from it and its toJSONString method will be + called. Otherwise, the value's toString method will be called, and the + result will be quoted. + +

        + Warning: This method assumes that the data structure is acyclical.

        +
        Parameters:
        value - The value to be serialized.
        +
        Returns:
        a printable, displayable, transmittable representation of the + object, beginning with { (left + brace) and ending with } (right + brace).
        +
        Throws:
        +
        JSONException - If the value is or contains an invalid number.
        +
      • +
      + + + +
        +
      • +

        wrap

        +
        public static java.lang.Object wrap(java.lang.Object object)
        +
        Wrap an object, if necessary. If the object is null, return the NULL + object. If it is an array or collection, wrap it in a JSONArray. If it is + a map, wrap it in a JSONObject. If it is a standard property (Double, + String, et al) then it is already wrapped. Otherwise, if it comes from + one of the java packages, turn it into a string. And if it doesn't, try + to wrap it in a JSONObject. If the wrapping fails, then null is returned.
        +
        Parameters:
        object - The object to wrap
        +
        Returns:
        The wrapped value
        +
      • +
      + + + +
        +
      • +

        write

        +
        public java.io.Writer write(java.io.Writer writer)
        +
        Write the contents of the JSONObject as JSON text to a writer. For + compactness, no whitespace is added. +

        + Warning: This method assumes that the data structure is acyclical.

        +
        Returns:
        The writer.
        +
        Throws:
        +
        JSONException
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.6/reference/org/json/JSONString.html b/distribution/json4processing-0.1.6/reference/org/json/JSONString.html new file mode 100644 index 000000000..c3f6f487d --- /dev/null +++ b/distribution/json4processing-0.1.6/reference/org/json/JSONString.html @@ -0,0 +1,215 @@ + + + + + +JSONString (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Interface JSONString

+
+
+
+
    +
  • +
    +
    +
    public interface JSONString
    +
    The JSONString interface allows a toJSONString() + method so that a class can change the behavior of + JSONObject.toString(), JSONArray.toString(), + and JSONWriter.value(Object). The + toJSONString method will be used instead of the default behavior + of using the Object's toString() method and quoting the result.
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      java.lang.StringtoJSONString() +
      The toJSONString method allows a class to produce its own JSON + serialization.
      +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        toJSONString

        +
        java.lang.String toJSONString()
        +
        The toJSONString method allows a class to produce its own JSON + serialization.
        +
        Returns:
        A strictly syntactically correct JSON text.
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.6/reference/org/json/JSONStringer.html b/distribution/json4processing-0.1.6/reference/org/json/JSONStringer.html new file mode 100644 index 000000000..cae1c8a03 --- /dev/null +++ b/distribution/json4processing-0.1.6/reference/org/json/JSONStringer.html @@ -0,0 +1,307 @@ + + + + + +JSONStringer (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class JSONStringer

+
+
+ +
+
    +
  • +
    +
    +
    public class JSONStringer
    +extends JSONWriter
    +
    JSONStringer provides a quick and convenient way of producing JSON text. + The texts produced strictly conform to JSON syntax rules. No whitespace is + added, so the results are ready for transmission or storage. Each instance of + JSONStringer can produce one JSON text. +

    + A JSONStringer instance provides a value method for appending + values to the + text, and a key + method for adding keys before values in objects. There are array + and endArray methods that make and bound array values, and + object and endObject methods which make and bound + object values. All of these methods return the JSONWriter instance, + permitting cascade style. For example,

    + myString = new JSONStringer()
    +     .object()
    +         .key("JSON")
    +         .value("Hello, World!")
    +     .endObject()
    +     .toString();
    which produces the string
    + {"JSON":"Hello, World!"}
    +

    + The first method called must be array or object. + There are no methods for adding commas or colons. JSONStringer adds them for + you. Objects and arrays can be nested up to 20 levels deep. +

    + This can sometimes be easier than using a JSONObject to build a string.

    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      JSONStringer() +
      Make a fresh JSONStringer.
      +
      +
    • +
    + + +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        JSONStringer

        +
        public JSONStringer()
        +
        Make a fresh JSONStringer. It can be used to build one JSON text.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        toString

        +
        public java.lang.String toString()
        +
        Return the JSON text. This method is used to obtain the product of the + JSONStringer instance. It will return null if there was a + problem in the construction of the JSON text (such as the calls to + array were not properly balanced with calls to + endArray).
        +
        +
        Overrides:
        +
        toString in class java.lang.Object
        +
        Returns:
        The JSON text.
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.6/reference/org/json/JSONTokener.html b/distribution/json4processing-0.1.6/reference/org/json/JSONTokener.html new file mode 100644 index 000000000..f2fe60eae --- /dev/null +++ b/distribution/json4processing-0.1.6/reference/org/json/JSONTokener.html @@ -0,0 +1,557 @@ + + + + + +JSONTokener (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class JSONTokener

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.json.JSONTokener
    • +
    +
  • +
+
+
    +
  • +
    +
    Direct Known Subclasses:
    +
    HTTPTokener, XMLTokener
    +
    +
    +
    +
    public class JSONTokener
    +extends java.lang.Object
    +
    A JSONTokener takes a source string and extracts characters and tokens from + it. It is used by the JSONObject and JSONArray constructors to parse + JSON source strings.
    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + + + +
      Constructors 
      Constructor and Description
      JSONTokener(java.io.InputStream inputStream) +
      Construct a JSONTokener from an InputStream.
      +
      JSONTokener(java.io.Reader reader) +
      Construct a JSONTokener from a Reader.
      +
      JSONTokener(java.lang.String s) +
      Construct a JSONTokener from a string.
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      voidback() +
      Back up one character.
      +
      static intdehexchar(char c) +
      Get the hex value of a character (base16).
      +
      booleanend() 
      booleanmore() +
      Determine if the source string still contains characters that next() + can consume.
      +
      charnext() +
      Get the next character in the source string.
      +
      charnext(char c) +
      Consume the next character, and check that it matches a specified + character.
      +
      java.lang.Stringnext(int n) +
      Get the next n characters.
      +
      charnextClean() +
      Get the next char in the string, skipping whitespace.
      +
      java.lang.StringnextString(char quote) +
      Return the characters up to the next close quote character.
      +
      java.lang.StringnextTo(char delimiter) +
      Get the text up but not including the specified character or the + end of line, whichever comes first.
      +
      java.lang.StringnextTo(java.lang.String delimiters) +
      Get the text up but not including one of the specified delimiter + characters or the end of line, whichever comes first.
      +
      java.lang.ObjectnextValue() +
      Get the next value.
      +
      charskipTo(char to) +
      Skip characters until the next character is the requested character.
      +
      java.lang.StringtoString() +
      Make a printable string of this JSONTokener.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        JSONTokener

        +
        public JSONTokener(java.io.Reader reader)
        +
        Construct a JSONTokener from a Reader.
        +
        Parameters:
        reader - A reader.
        +
      • +
      + + + +
        +
      • +

        JSONTokener

        +
        public JSONTokener(java.io.InputStream inputStream)
        +
        Construct a JSONTokener from an InputStream.
        +
      • +
      + + + +
        +
      • +

        JSONTokener

        +
        public JSONTokener(java.lang.String s)
        +
        Construct a JSONTokener from a string.
        +
        Parameters:
        s - A source string.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        back

        +
        public void back()
        +
        Back up one character. This provides a sort of lookahead capability, + so that you can test for a digit or letter before attempting to parse + the next number or identifier.
        +
      • +
      + + + +
        +
      • +

        dehexchar

        +
        public static int dehexchar(char c)
        +
        Get the hex value of a character (base16).
        +
        Parameters:
        c - A character between '0' and '9' or between 'A' and 'F' or + between 'a' and 'f'.
        +
        Returns:
        An int between 0 and 15, or -1 if c was not a hex digit.
        +
      • +
      + + + +
        +
      • +

        end

        +
        public boolean end()
        +
      • +
      + + + +
        +
      • +

        more

        +
        public boolean more()
        +
        Determine if the source string still contains characters that next() + can consume.
        +
        Returns:
        true if not yet at the end of the source.
        +
      • +
      + + + +
        +
      • +

        next

        +
        public char next()
        +
        Get the next character in the source string.
        +
        Returns:
        The next character, or 0 if past the end of the source string.
        +
      • +
      + + + +
        +
      • +

        next

        +
        public char next(char c)
        +
        Consume the next character, and check that it matches a specified + character.
        +
        Parameters:
        c - The character to match.
        +
        Returns:
        The character.
        +
        Throws:
        +
        JSONException - if the character does not match.
        +
      • +
      + + + +
        +
      • +

        next

        +
        public java.lang.String next(int n)
        +
        Get the next n characters.
        +
        Parameters:
        n - The number of characters to take.
        +
        Returns:
        A string of n characters.
        +
        Throws:
        +
        JSONException - Substring bounds error if there are not + n characters remaining in the source string.
        +
      • +
      + + + +
        +
      • +

        nextClean

        +
        public char nextClean()
        +
        Get the next char in the string, skipping whitespace.
        +
        Returns:
        A character, or 0 if there are no more characters.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        nextString

        +
        public java.lang.String nextString(char quote)
        +
        Return the characters up to the next close quote character. + Backslash processing is done. The formal JSON format does not + allow strings in single quotes, but an implementation is allowed to + accept them.
        +
        Parameters:
        quote - The quoting character, either + " (double quote) or + ' (single quote).
        +
        Returns:
        A String.
        +
        Throws:
        +
        JSONException - Unterminated string.
        +
      • +
      + + + +
        +
      • +

        nextTo

        +
        public java.lang.String nextTo(char delimiter)
        +
        Get the text up but not including the specified character or the + end of line, whichever comes first.
        +
        Parameters:
        delimiter - A delimiter character.
        +
        Returns:
        A string.
        +
      • +
      + + + +
        +
      • +

        nextTo

        +
        public java.lang.String nextTo(java.lang.String delimiters)
        +
        Get the text up but not including one of the specified delimiter + characters or the end of line, whichever comes first.
        +
        Parameters:
        delimiters - A set of delimiter characters.
        +
        Returns:
        A string, trimmed.
        +
      • +
      + + + +
        +
      • +

        nextValue

        +
        public java.lang.Object nextValue()
        +
        Get the next value. The value can be a Boolean, Double, Integer, + JSONArray, JSONObject, Long, or String, or the JSONObject.NULL object.
        +
        Returns:
        An object.
        +
        Throws:
        +
        JSONException - If syntax error.
        +
      • +
      + + + +
        +
      • +

        skipTo

        +
        public char skipTo(char to)
        +
        Skip characters until the next character is the requested character. + If the requested character is not found, no characters are skipped.
        +
        Parameters:
        to - A character to skip to.
        +
        Returns:
        The requested character, or zero if the requested character + is not found.
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public java.lang.String toString()
        +
        Make a printable string of this JSONTokener.
        +
        +
        Overrides:
        +
        toString in class java.lang.Object
        +
        Returns:
        " at {index} [character {character} line {line}]"
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.6/reference/org/json/JSONWriter.html b/distribution/json4processing-0.1.6/reference/org/json/JSONWriter.html new file mode 100644 index 000000000..f4047e3ed --- /dev/null +++ b/distribution/json4processing-0.1.6/reference/org/json/JSONWriter.html @@ -0,0 +1,474 @@ + + + + + +JSONWriter (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class JSONWriter

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.json.JSONWriter
    • +
    +
  • +
+
+
    +
  • +
    +
    Direct Known Subclasses:
    +
    JSONStringer
    +
    +
    +
    +
    public class JSONWriter
    +extends java.lang.Object
    +
    JSONWriter provides a quick and convenient way of producing JSON text. + The texts produced strictly conform to JSON syntax rules. No whitespace is + added, so the results are ready for transmission or storage. Each instance of + JSONWriter can produce one JSON text. +

    + A JSONWriter instance provides a value method for appending + values to the + text, and a key + method for adding keys before values in objects. There are array + and endArray methods that make and bound array values, and + object and endObject methods which make and bound + object values. All of these methods return the JSONWriter instance, + permitting a cascade style. For example,

    + new JSONWriter(myWriter)
    +     .object()
    +         .key("JSON")
    +         .value("Hello, World!")
    +     .endObject();
    which writes
    + {"JSON":"Hello, World!"}
    +

    + The first method called must be array or object. + There are no methods for adding commas or colons. JSONWriter adds them for + you. Objects and arrays can be nested up to 20 levels deep. +

    + This can sometimes be easier than using a JSONObject to build a string.

    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      JSONWriter(java.io.Writer w) +
      Make a fresh JSONWriter.
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      JSONWriterarray() +
      Begin appending a new array.
      +
      JSONWriterendArray() +
      End an array.
      +
      JSONWriterendObject() +
      End an object.
      +
      JSONWriterkey(java.lang.String string) +
      Append a key.
      +
      JSONWriterobject() +
      Begin appending a new object.
      +
      JSONWritervalue(boolean b) +
      Append either the value true or the value + false.
      +
      JSONWritervalue(double d) +
      Append a double value.
      +
      JSONWritervalue(long l) +
      Append a long value.
      +
      JSONWritervalue(java.lang.Object object) +
      Append an object value.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        JSONWriter

        +
        public JSONWriter(java.io.Writer w)
        +
        Make a fresh JSONWriter. It can be used to build one JSON text.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        array

        +
        public JSONWriter array()
        +                 throws JSONException
        +
        Begin appending a new array. All values until the balancing + endArray will be appended to this array. The + endArray method must be called to mark the array's end.
        +
        Returns:
        this
        +
        Throws:
        +
        JSONException - If the nesting is too deep, or if the object is + started in the wrong place (for example as a key or after the end of the + outermost array or object).
        +
      • +
      + + + +
        +
      • +

        endArray

        +
        public JSONWriter endArray()
        +                    throws JSONException
        +
        End an array. This method most be called to balance calls to + array.
        +
        Returns:
        this
        +
        Throws:
        +
        JSONException - If incorrectly nested.
        +
      • +
      + + + +
        +
      • +

        endObject

        +
        public JSONWriter endObject()
        +                     throws JSONException
        +
        End an object. This method most be called to balance calls to + object.
        +
        Returns:
        this
        +
        Throws:
        +
        JSONException - If incorrectly nested.
        +
      • +
      + + + +
        +
      • +

        key

        +
        public JSONWriter key(java.lang.String string)
        +               throws JSONException
        +
        Append a key. The key will be associated with the next value. In an + object, every value must be preceded by a key.
        +
        Parameters:
        string - A key string.
        +
        Returns:
        this
        +
        Throws:
        +
        JSONException - If the key is out of place. For example, keys + do not belong in arrays or if the key is null.
        +
      • +
      + + + +
        +
      • +

        object

        +
        public JSONWriter object()
        +                  throws JSONException
        +
        Begin appending a new object. All keys and values until the balancing + endObject will be appended to this object. The + endObject method must be called to mark the object's end.
        +
        Returns:
        this
        +
        Throws:
        +
        JSONException - If the nesting is too deep, or if the object is + started in the wrong place (for example as a key or after the end of the + outermost array or object).
        +
      • +
      + + + +
        +
      • +

        value

        +
        public JSONWriter value(boolean b)
        +                 throws JSONException
        +
        Append either the value true or the value + false.
        +
        Parameters:
        b - A boolean.
        +
        Returns:
        this
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        value

        +
        public JSONWriter value(double d)
        +                 throws JSONException
        +
        Append a double value.
        +
        Parameters:
        d - A double.
        +
        Returns:
        this
        +
        Throws:
        +
        JSONException - If the number is not finite.
        +
      • +
      + + + + + + + +
        +
      • +

        value

        +
        public JSONWriter value(java.lang.Object object)
        +                 throws JSONException
        +
        Append an object value.
        +
        Parameters:
        object - The object to append. It can be null, or a Boolean, Number, + String, JSONObject, or JSONArray, or an object that implements JSONString.
        +
        Returns:
        this
        +
        Throws:
        +
        JSONException - If the value is out of sequence.
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.6/reference/org/json/XML.html b/distribution/json4processing-0.1.6/reference/org/json/XML.html new file mode 100644 index 000000000..d088801ee --- /dev/null +++ b/distribution/json4processing-0.1.6/reference/org/json/XML.html @@ -0,0 +1,552 @@ + + + + + +XML (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class XML

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.json.XML
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class XML
    +extends java.lang.Object
    +
    This provides static methods to convert an XML text into a JSONObject, + and to covert a JSONObject into an XML text.
    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeField and Description
      static java.lang.CharacterAMP +
      The Character '&'.
      +
      static java.lang.CharacterAPOS +
      The Character '''.
      +
      static java.lang.CharacterBANG +
      The Character '!'.
      +
      static java.lang.CharacterEQ +
      The Character '='.
      +
      static java.lang.CharacterGT +
      The Character '>'.
      +
      static java.lang.CharacterLT +
      The Character '<'.
      +
      static java.lang.CharacterQUEST +
      The Character '?'.
      +
      static java.lang.CharacterQUOT +
      The Character '"'.
      +
      static java.lang.CharacterSLASH +
      The Character '/'.
      +
      +
    • +
    + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      XML() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      static java.lang.Stringescape(java.lang.String string) +
      Replace special characters with XML escapes:
      +
      static voidnoSpace(java.lang.String string) +
      Throw an exception if the string contains whitespace.
      +
      static java.lang.ObjectstringToValue(java.lang.String string) +
      Try to convert a string into a number, boolean, or null.
      +
      static JSONObjtoJSONObject(java.lang.String string) +
      Convert a well-formed (but not necessarily valid) XML string into a + JSONObject.
      +
      static java.lang.StringtoString(java.lang.Object object) +
      Convert a JSONObject into a well-formed, element-normal XML string.
      +
      static java.lang.StringtoString(java.lang.Object object, + java.lang.String tagName) +
      Convert a JSONObject into a well-formed, element-normal XML string.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        AMP

        +
        public static final java.lang.Character AMP
        +
        The Character '&'.
        +
      • +
      + + + +
        +
      • +

        APOS

        +
        public static final java.lang.Character APOS
        +
        The Character '''.
        +
      • +
      + + + +
        +
      • +

        BANG

        +
        public static final java.lang.Character BANG
        +
        The Character '!'.
        +
      • +
      + + + +
        +
      • +

        EQ

        +
        public static final java.lang.Character EQ
        +
        The Character '='.
        +
      • +
      + + + +
        +
      • +

        GT

        +
        public static final java.lang.Character GT
        +
        The Character '>'.
        +
      • +
      + + + +
        +
      • +

        LT

        +
        public static final java.lang.Character LT
        +
        The Character '<'.
        +
      • +
      + + + +
        +
      • +

        QUEST

        +
        public static final java.lang.Character QUEST
        +
        The Character '?'.
        +
      • +
      + + + +
        +
      • +

        QUOT

        +
        public static final java.lang.Character QUOT
        +
        The Character '"'.
        +
      • +
      + + + +
        +
      • +

        SLASH

        +
        public static final java.lang.Character SLASH
        +
        The Character '/'.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        XML

        +
        public XML()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        escape

        +
        public static java.lang.String escape(java.lang.String string)
        +
        Replace special characters with XML escapes: +
        + & (ampersand) is replaced by &amp;
        + < (less than) is replaced by &lt;
        + > (greater than) is replaced by &gt;
        + " (double quote) is replaced by &quot;
        + 
        +
        Parameters:
        string - The string to be escaped.
        +
        Returns:
        The escaped string.
        +
      • +
      + + + +
        +
      • +

        noSpace

        +
        public static void noSpace(java.lang.String string)
        +                    throws JSONException
        +
        Throw an exception if the string contains whitespace. + Whitespace is not allowed in tagNames and attributes.
        +
        Parameters:
        string -
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        stringToValue

        +
        public static java.lang.Object stringToValue(java.lang.String string)
        +
        Try to convert a string into a number, boolean, or null. If the string + can't be converted, return the string. This is much less ambitious than + JSONObject.stringToValue, especially because it does not attempt to + convert plus forms, octal forms, hex forms, or E forms lacking decimal + points.
        +
        Parameters:
        string - A String.
        +
        Returns:
        A simple JSON value.
        +
      • +
      + + + +
        +
      • +

        toJSONObject

        +
        public static JSONObj toJSONObject(java.lang.String string)
        +                            throws JSONException
        +
        Convert a well-formed (but not necessarily valid) XML string into a + JSONObject. Some information may be lost in this transformation + because JSON is a data format and XML is a document format. XML uses + elements, attributes, and content text, while JSON uses unordered + collections of name/value pairs and arrays of values. JSON does not + does not like to distinguish between elements and attributes. + Sequences of similar elements are represented as JSONArrays. Content + text may be placed in a "content" member. Comments, prologs, DTDs, and + <[ [ ]]> are ignored.
        +
        Parameters:
        string - The source string.
        +
        Returns:
        A JSONObject containing the structured data from the XML string.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static java.lang.String toString(java.lang.Object object)
        +                                 throws JSONException
        +
        Convert a JSONObject into a well-formed, element-normal XML string.
        +
        Parameters:
        object - A JSONObject.
        +
        Returns:
        A string.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static java.lang.String toString(java.lang.Object object,
        +                        java.lang.String tagName)
        +                                 throws JSONException
        +
        Convert a JSONObject into a well-formed, element-normal XML string.
        +
        Parameters:
        object - A JSONObject.
        tagName - The optional name of the enclosing tag.
        +
        Returns:
        A string.
        +
        Throws:
        +
        JSONException
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.6/reference/org/json/XMLTokener.html b/distribution/json4processing-0.1.6/reference/org/json/XMLTokener.html new file mode 100644 index 000000000..2b15a0f74 --- /dev/null +++ b/distribution/json4processing-0.1.6/reference/org/json/XMLTokener.html @@ -0,0 +1,427 @@ + + + + + +XMLTokener (Javadocs: json4processing) + + + + + + + + + + + +
+
org.json
+

Class XMLTokener

+
+
+ +
+
    +
  • +
    +
    +
    public class XMLTokener
    +extends JSONTokener
    +
    The XMLTokener extends the JSONTokener to provide additional methods + for the parsing of XML texts.
    +
    Author:
    +
    JSON.org
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Summary

      + + + + + + + + + + +
      Fields 
      Modifier and TypeField and Description
      static java.util.HashMapentity +
      The table of entity values.
      +
      +
    • +
    + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      XMLTokener(java.lang.String s) +
      Construct an XMLTokener from a string.
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      java.lang.StringnextCDATA() +
      Get the text in the CDATA block.
      +
      java.lang.ObjectnextContent() +
      Get the next XML outer token, trimming whitespace.
      +
      java.lang.ObjectnextEntity(char ampersand) +
      Return the next entity.
      +
      java.lang.ObjectnextMeta() +
      Returns the next XML meta token.
      +
      java.lang.ObjectnextToken() +
      Get the next XML Token.
      +
      booleanskipPast(java.lang.String to) +
      Skip characters until past the requested string.
      +
      + +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        entity

        +
        public static final java.util.HashMap entity
        +
        The table of entity values. It initially contains Character values for + amp, apos, gt, lt, quot.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        XMLTokener

        +
        public XMLTokener(java.lang.String s)
        +
        Construct an XMLTokener from a string.
        +
        Parameters:
        s - A source string.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        nextCDATA

        +
        public java.lang.String nextCDATA()
        +
        Get the text in the CDATA block.
        +
        Returns:
        The string up to the ]]>.
        +
        Throws:
        +
        JSONException - If the ]]> is not found.
        +
      • +
      + + + +
        +
      • +

        nextContent

        +
        public java.lang.Object nextContent()
        +
        Get the next XML outer token, trimming whitespace. There are two kinds + of tokens: the '<' character which begins a markup tag, and the content + text between markup tags.
        +
        Returns:
        A string, or a '<' Character, or null if there is no more + source text.
        +
        Throws:
        +
        JSONException
        +
      • +
      + + + +
        +
      • +

        nextEntity

        +
        public java.lang.Object nextEntity(char ampersand)
        +
        Return the next entity. These entities are translated to Characters: + & ' > < ".
        +
        Parameters:
        ampersand - An ampersand character.
        +
        Returns:
        A Character or an entity String if the entity is not recognized.
        +
        Throws:
        +
        JSONException - If missing ';' in XML entity.
        +
      • +
      + + + +
        +
      • +

        nextMeta

        +
        public java.lang.Object nextMeta()
        +
        Returns the next XML meta token. This is used for skipping over + and structures.
        +
        Returns:
        Syntax characters (< > / = ! ?) are returned as + Character, and strings and names are returned as Boolean. We don't care + what the values actually are.
        +
        Throws:
        +
        JSONException - If a string is not properly closed or if the XML + is badly structured.
        +
      • +
      + + + +
        +
      • +

        nextToken

        +
        public java.lang.Object nextToken()
        +
        Get the next XML Token. These tokens are found inside of angle + brackets. It may be one of these characters: / > = ! ? or it + may be a string wrapped in single quotes or double quotes, or it may be a + name.
        +
        Returns:
        a String or a Character.
        +
        Throws:
        +
        JSONException - If the XML is not well formed.
        +
      • +
      + + + +
        +
      • +

        skipPast

        +
        public boolean skipPast(java.lang.String to)
        +
        Skip characters until past the requested string. + If it is not found, we are left at the end of the source with a result of false.
        +
        Parameters:
        to - A string to skip past.
        +
        Throws:
        +
        JSONException
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.6/reference/org/json/package-frame.html b/distribution/json4processing-0.1.6/reference/org/json/package-frame.html new file mode 100644 index 000000000..82b0dcfba --- /dev/null +++ b/distribution/json4processing-0.1.6/reference/org/json/package-frame.html @@ -0,0 +1,44 @@ + + + + + +org.json (Javadocs: json4processing) + + + + +

org.json

+ + + diff --git a/distribution/json4processing-0.1.6/reference/org/json/package-summary.html b/distribution/json4processing-0.1.6/reference/org/json/package-summary.html new file mode 100644 index 000000000..e103fe48e --- /dev/null +++ b/distribution/json4processing-0.1.6/reference/org/json/package-summary.html @@ -0,0 +1,270 @@ + + + + + +org.json (Javadocs: json4processing) + + + + + + + + + + +
+

Package org.json

+
+
+
    +
  • + + + + + + + + + + + + +
    Interface Summary 
    InterfaceDescription
    JSONString +
    The JSONString interface allows a toJSONString() + method so that a class can change the behavior of + JSONObject.toString(), JSONArray.toString(), + and JSONWriter.value(Object).
    +
    +
  • +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    CDL +
    This provides static methods to convert comma delimited text into a + JSONArray, and to covert a JSONArray into comma delimited text.
    +
    Cookie +
    Convert a web browser cookie specification to a JSONObject and back.
    +
    CookieList +
    Convert a web browser cookie list string to a JSONObject and back.
    +
    HTTP +
    Convert an HTTP header to a JSONObject and back.
    +
    HTTPTokener +
    The HTTPTokener extends the JSONTokener to provide additional methods + for the parsing of HTTP headers.
    +
    JSON +
    This is a "mashup" test for combining the two JSON types, the goal is to make + it work similarly to how the processing XML library works.
    +
    JSONArr +
    A JSONArray is an ordered sequence of values.
    +
    JSONML +
    This provides static methods to convert an XML text into a JSONArray or + JSONObject, and to covert a JSONArray or JSONObject into an XML text using + the JsonML transform.
    +
    JSONObj +
    A JSONObject is an unordered collection of name/value pairs.
    +
    JSONStringer +
    JSONStringer provides a quick and convenient way of producing JSON text.
    +
    JSONTokener +
    A JSONTokener takes a source string and extracts characters and tokens from + it.
    +
    JSONWriter +
    JSONWriter provides a quick and convenient way of producing JSON text.
    +
    XML +
    This provides static methods to convert an XML text into a JSONObject, + and to covert a JSONObject into an XML text.
    +
    XMLTokener +
    The XMLTokener extends the JSONTokener to provide additional methods + for the parsing of XML texts.
    +
    +
  • +
  • + + + + + + + + + + + + +
    Enum Summary 
    EnumDescription
    JSON.JSONType 
    +
  • +
  • + + + + + + + + + + + + +
    Exception Summary 
    ExceptionDescription
    JSONException +
    The JSONException is thrown by the JSON.org classes when things are amiss.
    +
    +
  • +
+
+ + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.6/reference/org/json/package-tree.html b/distribution/json4processing-0.1.6/reference/org/json/package-tree.html new file mode 100644 index 000000000..dba9e182e --- /dev/null +++ b/distribution/json4processing-0.1.6/reference/org/json/package-tree.html @@ -0,0 +1,165 @@ + + + + + +org.json Class Hierarchy (Javadocs: json4processing) + + + + + + + +
+ + + + + +
+ + +
+

Hierarchy For Package org.json

+
+
+

Class Hierarchy

+ +

Interface Hierarchy

+ +

Enum Hierarchy

+
    +
  • java.lang.Object +
      +
    • java.lang.Enum<E> (implements java.lang.Comparable<T>, java.io.Serializable) + +
    • +
    +
  • +
+
+ +
+ + + + + +
+ + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.6/reference/overview-tree.html b/distribution/json4processing-0.1.6/reference/overview-tree.html new file mode 100644 index 000000000..3891e8b77 --- /dev/null +++ b/distribution/json4processing-0.1.6/reference/overview-tree.html @@ -0,0 +1,169 @@ + + + + + +Class Hierarchy (Javadocs: json4processing) + + + + + + + +
+ + + + + +
+ + +
+

Hierarchy For All Packages

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +

Interface Hierarchy

+ +

Enum Hierarchy

+
    +
  • java.lang.Object +
      +
    • java.lang.Enum<E> (implements java.lang.Comparable<T>, java.io.Serializable) + +
    • +
    +
  • +
+
+ +
+ + + + + +
+ + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.6/reference/package-list b/distribution/json4processing-0.1.6/reference/package-list new file mode 100644 index 000000000..6374a8ef9 --- /dev/null +++ b/distribution/json4processing-0.1.6/reference/package-list @@ -0,0 +1 @@ +org.json diff --git a/distribution/json4processing-0.1.6/reference/resources/background.gif b/distribution/json4processing-0.1.6/reference/resources/background.gif new file mode 100644 index 0000000000000000000000000000000000000000..f471940fde2f39ef8943a6af9569bcf986b1579b GIT binary patch literal 2313 zcmV+k3HJ6!Nk%w1VKM-40OkMy00030|NlK(aXwsfKV5S}VtGJbbVOr%L0@%CZH88Q zl{{NzcR^uxNo<2iYk@pjY)*5FJz8x~bc{)B zfk z+1T6M-s9WdW8dcJ-wO*3@9+W*5AY543-j^$^!EPz_4eHZ2#>)41`h@dc!2OAgN6$a zCS2I?;lqgx6IR4nkpTe;1RN0f=zxMq2O=q`94V5d$&e>Unta)^<;;^G3>e7yp=ZvW z6DIW3xpSvaogXF?_4%`@(V;s}NR^5J!3hrtJV@1QRV&r5S*L!zYE|rss${iFkg&!? zTN5V#)~=bmMorwgZsEpdOE)iExo+FO-8;8Kga{=HbSQCnF=E6W3?o*|ID%uwi5**> zJXy127Y9m+=HQ|PhXWi+xNwoWv}n_%Pq%(e+H~mGqhq5kv4Mo|-n~g|7!F*xZ{xv< zCpXS~dGg^IGK?4@J-T%b(XnUHFul6n<@2&4)zzyO2) z3Q8`i0+UKY*`$}e9mmp;tg*))`|PsK1|hAo%u0K$vDwm4gaSkm0j{`26k#qAKmbuhxZ#cquDR>B zD{s8+&TH-uNg$C#68QG}1HMBHfrP&L@@w$F_!itRzXdCN@V|LDAu%3!IDtq1#1UV7 z#1RxvT=B(DWbCoU5l=ia$Pp`Hgb_?Mp@hmtxZDI2N-)v#$}PXVvdm1d>@v(v`0TUJ zF)Pu89(q`zv=w^nVTIF3@3BYIPA}c`(@ZCAwbNBEt@PDUKe5CTR8aB66IE1!w%Amt zy+jpcn~k>GZpVFg+H6x{_uOksvBlq0OyT$6TyQZ37k(cOxZr|JEx1sGm<(M9gH z-~PMqyn|tT=))UN`|-FFFUA#KToK0fUOaz=7}Z~KeHhVC&%O27cTfHQ^WBU8z4p&T zp#>D|V}XShTD;Hx745Iz{`>K-Z$A|7!*Boo{mY;G21vjH8t{M!OrQc6$iN0V@PQDF zpadsK!3tXNf*8!81~qnXWuHZ)kytd=_y+ADWvw31ouV;CdZ#ya*(l7-A-C-Y^+iit8O zBy3*`Ls$|5Hn4m_^I^|C7{m7EFn|5vTk;|oywIgCc9Bb*=L+Y$)M>9GC<|HGs@6NB zHLY%03!dDf=eDRt2O6lVSFRcsuWZEwU?=z$CZ0W?#VJfdN>HG(l%oKpyiftJc|Y)xkjSJYCrQal-0PC~()T9xwF!Jf zVi1UA#3BBbh(i8r5&v#Pz!cF41KjbCc?4u2@@Q~oKLirt2TM30;y6b+zyX2`Yl9u; z`0$3;v0-YUp&7NdPT#q`cZlbij$jvbRk6R>8g*>}*b9E+WDwmpHAAxYzyT aU_pX{M6b8i>#Dq3onfZy}_nli%!Q$ZV%e&!tN2 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 YpWXKgmku8Vj|K)Vje`mzEKCg608Q#dYybcN literal 0 HcmV?d00001 diff --git a/distribution/json4processing-0.1.6/reference/serialized-form.html b/distribution/json4processing-0.1.6/reference/serialized-form.html new file mode 100644 index 000000000..204b28b93 --- /dev/null +++ b/distribution/json4processing-0.1.6/reference/serialized-form.html @@ -0,0 +1,142 @@ + + + + + +Serialized Form (Javadocs: json4processing) + + + + + + + + + + +
+

Serialized Form

+
+
+
    +
  • +

    Package org.json

    +
      +
    • + + +

      Class org.json.JSONException extends java.lang.Exception implements Serializable

      +
      +
      serialVersionUID:
      +
      0L
      +
      +
        +
      • + + +

        Serialized Fields

        +
          +
        • +

          cause

          +
          java.lang.Throwable cause
          +
        • +
        +
      • +
      +
    • +
    +
  • +
+
+ + + + +

processing library json4processing by Andreas Goransson. (c) 2011

+ + diff --git a/distribution/json4processing-0.1.6/reference/stylesheet.css b/distribution/json4processing-0.1.6/reference/stylesheet.css new file mode 100644 index 000000000..54998c2bc --- /dev/null +++ b/distribution/json4processing-0.1.6/reference/stylesheet.css @@ -0,0 +1,310 @@ +/* Javadoc style sheet */ +/* Define colors, fonts and other style attributes here to override the defaults */ +/* processingLibs style by andreas schlegel, sojamo */ + + +body { + margin : 0; + padding : 0; + padding-left : 10px; + padding-right : 8px; + background-color : #FFFFFF; + font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; + font-size : 100%; + font-size : 0.7em; + font-weight : normal; + line-height : normal; + margin-bottom:30px; +} + + + + +/* Headings */ +h1, h2, h3, h4, h5, th { + font-family :Arial, Helvetica, sans-serif; + font-size:1.2em; +} + + +p { + font-size : 1em; + width:80%; +} + +pre, code { + font-family : "Courier New", Courier, monospace; + font-size : 12px; + line-height : normal; +} + + + +table { + border:0; + margin-bottom:10px; + margin-top:10px; +} + + +tr, td { + border-top: 0px solid; + border-left: 0px solid; + padding-top:8px; + padding-bottom:8px; +} + + + +hr { + border:0; + height:1px; + padding:0; + margin:0; + margin-bottom:4px; + +} + + + +dd, th, td, font { + font-size:1.0em; + line-height:1.0em; +} + + + +dt { + margin-bottom:0px; +} + + + +dd { + margin-top:2px; + margin-bottom:4px; +} + + + +a { + text-decoration: underline; + font-weight: normal; +} + +a:hover, +a:active { + text-decoration: underline; + font-weight: normal; +} + +a:visited, +a:link:visited { + text-decoration: underline; + font-weight: normal; +} + + +img { + border: 0px solid #000000; +} + + + +/* Navigation bar fonts */ +.NavBarCell1 { + border:0; +} + +.NavBarCell1Rev { + border:0; +} + +.NavBarFont1 { + font-family: Arial, Helvetica, sans-serif; + font-size:1.1em; +} + + +.NavBarFont1 b { + font-weight:normal; +} + + + +.NavBarFont1:after, .NavBarFont1Rev:after { + font-weight:normal; + content: " \\"; +} + + +.NavBarFont1Rev { + font-family: Arial, Helvetica, sans-serif; + font-size:1.1em; +} + +.NavBarFont1Rev b { + font-family: Arial, Helvetica, sans-serif; + font-size:1.1em; + font-weight:normal; +} + +.NavBarCell2 { + font-family: Arial, Helvetica, sans-serif; +} + +.NavBarCell3 { + font-family: Arial, Helvetica, sans-serif; +} + + + +font.FrameItemFont { + font-family: Helvetica, Arial, sans-serif; + font-size:1.1em; + line-height:1.1em; +} + +font.FrameHeadingFont { + font-family: Helvetica, Arial, sans-serif; + line-height:32px; +} + +/* Font used in left-hand frame lists */ +.FrameTitleFont { + font-family: Helvetica, Arial, sans-serif +} + + +.toggleList { + padding:0; + margin:0; + margin-top:12px; +} + +.toggleList dt { + font-weight:bold; + font-size:12px; + font-family:arial,sans-serif; + padding:0px; + margin:10px 0px 10px 0px; +} + +.toggleList dt span { + font-family: monospace; + padding:0; + margin:0; +} + + +.toggleList dd { + margin:0; + padding:0; +} + +html.isjs .toggleList dd { + display: none; +} + +.toggleList pre { + padding: 4px 4px 4px 4px; +} + + + + + +/* COLORS */ + +pre, code { + color: #000000; +} + + +body { + color : #333333; + background-color :#FFFFFF; +} + + +h1, h2, h3, h4, h5, h6 { + color:#555; +} + +a, +.toggleList dt { + color: #1a7eb0; +} + +a:hover, +a:active { + color: #1a7eb0; +} + +a:visited, +a:link:visited { + color: #1a7eb0; +} + +td,tr { + border-color: #999999; +} + +hr { + color:#999999; + background:#999999; +} + + +.TableHeadingColor { + background: #dcdcdc; + color: #555; +} + + +.TableSubHeadingColor { + background: #EEEEFF +} + +.TableRowColor { + background: #FFFFFF +} + + +.NavBarCell1 { + background-color:#dcdcdc; + color:#000; +} + +.NavBarCell1 a { + color:#333; +} + + +.NavBarCell1Rev { + background-color:transparent; +} + +.NavBarFont1 { + color:#333; +} + + +.NavBarFont1Rev { + color:#fff; +} + +.NavBarCell2 { + background-color:#999; +} + +.NavBarCell2 a { + color:#fff; +} + + + +.NavBarCell3 { + background-color:#dcdcdc; +} + diff --git a/distribution/json4processing-0.1.6/stylesheet.css b/distribution/json4processing-0.1.6/stylesheet.css new file mode 100644 index 000000000..4348b3814 --- /dev/null +++ b/distribution/json4processing-0.1.6/stylesheet.css @@ -0,0 +1,203 @@ +/* processingLibs style by andreas schlegel, sojamo. */ + + +* { + margin:0; + padding:0; + border:0; +} + + +body { + font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; + font-size : 100%; + font-size : 0.70em; + font-weight : normal; + line-height : normal; +} + + + +#container { + margin-left:64px; + background-color:#fff; +} + +#header { + float:left; + padding-top:24px; + padding-bottom:48px; +} + +#menu { + margin-top:16px; + float:left; + margin-bottom:64px; +} + + +#about, +#download, +#examples, +#demos, +#misc { + width:480px; + float:left; + margin-right:24px; +} + + +#resources, #info { + width:320px; + float:left; +} + + +.clear { + clear:both; +} + +#footer { + margin-top:300px; + height:20px; + margin-bottom:32px; +} + + +ul { + list-style:none; + padding:0; + margin:0; +} + + +#menu ul li, #subMenu ul li { + float:left; + padding-right:6px; +} + + + + + + +/* Headings */ + +h1 { + font-size:2em; + font-weight:normal; +} + + +h2, h3, h4, h5, th { + font-size:1.3em; + font-weight:normal; + margin-bottom:4px; +} + + + +p { + font-size:1em; + width:90%; + margin-bottom:32px; +} + + +pre, code { + font-family:"Courier New", Courier, monospace; + font-size:1em; + line-height:normal; +} + + + + +hr { + border:0; + height:1px; + margin-bottom:24px; +} + + +a { + text-decoration: underline; + font-weight: normal; +} + + +a:hover, +a:active { + text-decoration: underline; + font-weight: normal; +} + + +a:visited, +a:link:visited { + text-decoration: underline; + font-weight: normal; +} + + + +img { + border: 0px solid #000000; +} + + + + + +/* COLORS */ + + +body { + color : #333; + background-color :#fff; +} + + +#header { + background-color:#fff; + color:#333; +} + + + +h1, h2, h3, h4, h5, h6 { + color:#666; +} + + +pre, code { + color: #000000; +} + + +a,strong { + color: #333; +} + + +a:hover, +a:active { + color: #333; +} + + +a:visited, +a:link:visited { + color: #333; +} + + +#footer, #menu { + background-color:#fff; + color:#333; +} + + +#footer a, #menu a { + color:#333; +} diff --git a/resources/build.properties b/resources/build.properties index 4d570496d..e28e36acf 100644 --- a/resources/build.properties +++ b/resources/build.properties @@ -1,124 +1,124 @@ -# Create libraries for the open source programming language -# and environment processing (http://www.processing.org) -# -# Customize the build properties to make the ant-build-process -# work for your environment. How? Please read the comments below. -# -# The default properties are set for OSX, for Windows-settings -# please refer to comments made under (1) and (2). - - - -# (1) -# Where is your processing sketchbook located? -# If you are not sure, check the sketchbook location in your -# processing application preferences. -# ${user.home} points the compiler to your home directory -# For windows the default path to your sketchbook would be -# ${user.home}/My Documents/Processing (make adjustments below). - -#sketchbook.location=/media/Contents/sketchbook -sketchbook.location=${user.home}/Documents/Processing - - - -# (2) -# Where are the jar files located that are required for compiling -# your library such as e.g. core.jar? -# by default the local classpath location points to folder libs -# inside eclipse's workspace (by default found in your home directory). -# For Windows the default path would be ${user.home}/workspace/libs -# (make adjustments below) - -#classpath.local.location=/media/Contents/workspace_projects/libs -classpath.local.location=${user.home}/workspace/libs - - - -# For OSX users. -# The following path will direct you into processing's -# application source code folder in case you put processing inside your -# Applications folder. Uncommenting the line below will overwrite the -# classpath.local.location from above. - -# classpath.local.location=/Applications/Processing.app/Contents/Resources/Java/ - - -# Add all jar files that are required for compiling your project -# to the local and project classpath, use a comma as delimiter. -# These jar files must be inside your classpath.local.location folder. - -classpath.local.include=core.jar - - -# Add processing's libraries folder to the classpath. -# If you don't need to include the libraries folder to your classpath, -# comment out the following line. - -classpath.libraries.location=${sketchbook.location}/libraries - - - -# (3) set the java version that should be used to compile your library. - -java.target.version=1.6 - - -# set the description of the ant build.xml file - -ant.description=processingLibs. ant build file. - - - -# (4) -# project details. -# Give your library a name. - -project.name=json4processing - - -# use normal or fast as value for project.compile -# (fast will only compile the project into your sketchbook, -# using normal as property will compile the distribution including the -# javadoc-reference and all web-files - the compile process here -# takes longer) - -project.compile=normal - -# all files compiled with project.compile=normal are stored -# in folder distribution - - - -# (5) -# the following items are properties that will be used to -# make changes to the html document template. values of properties -# will be implemented ito the document automatically. - -# set the current version of your project. - -project.version=0.1.5 -project.copyright=(c) 2011 -project.dependencies=? -project.keywords=? - -author.name=Andreas Goransson -author.url= - -tested.platform=linux, windows -tested.processingversion=1.5.1 - -# recommendations for storing your source code online are: code.google or github. - -source.host=github -source.url=https://github.com/agoransson/JSON-processing -source.repository=https://github.com/agoransson/JSON-processing - - -# include javadoc references into your project's javadoc - -javadoc.java.href= -#http://java.sun.com/javase/6/docs/api/ -javadoc.processing.href= -#http://dev.processing.org/reference/everything/javadoc/ - +# Create libraries for the open source programming language +# and environment processing (http://www.processing.org) +# +# Customize the build properties to make the ant-build-process +# work for your environment. How? Please read the comments below. +# +# The default properties are set for OSX, for Windows-settings +# please refer to comments made under (1) and (2). + + + +# (1) +# Where is your processing sketchbook located? +# If you are not sure, check the sketchbook location in your +# processing application preferences. +# ${user.home} points the compiler to your home directory +# For windows the default path to your sketchbook would be +# ${user.home}/My Documents/Processing (make adjustments below). + +#sketchbook.location=/media/Contents/sketchbook +sketchbook.location=${user.home}/Documents/Processing + + + +# (2) +# Where are the jar files located that are required for compiling +# your library such as e.g. core.jar? +# by default the local classpath location points to folder libs +# inside eclipse's workspace (by default found in your home directory). +# For Windows the default path would be ${user.home}/workspace/libs +# (make adjustments below) + +#classpath.local.location=/media/Contents/workspace_projects/libs +classpath.local.location=${user.home}/workspace/libs + + + +# For OSX users. +# The following path will direct you into processing's +# application source code folder in case you put processing inside your +# Applications folder. Uncommenting the line below will overwrite the +# classpath.local.location from above. + +# classpath.local.location=/Applications/Processing.app/Contents/Resources/Java/ + + +# Add all jar files that are required for compiling your project +# to the local and project classpath, use a comma as delimiter. +# These jar files must be inside your classpath.local.location folder. + +classpath.local.include=core.jar + + +# Add processing's libraries folder to the classpath. +# If you don't need to include the libraries folder to your classpath, +# comment out the following line. + +classpath.libraries.location=${sketchbook.location}/libraries + + + +# (3) set the java version that should be used to compile your library. + +java.target.version=1.6 + + +# set the description of the ant build.xml file + +ant.description=processingLibs. ant build file. + + + +# (4) +# project details. +# Give your library a name. + +project.name=json4processing + + +# use normal or fast as value for project.compile +# (fast will only compile the project into your sketchbook, +# using normal as property will compile the distribution including the +# javadoc-reference and all web-files - the compile process here +# takes longer) + +project.compile=normal + +# all files compiled with project.compile=normal are stored +# in folder distribution + + + +# (5) +# the following items are properties that will be used to +# make changes to the html document template. values of properties +# will be implemented ito the document automatically. + +# set the current version of your project. + +project.version=0.1.6 +project.copyright=(c) 2011 +project.dependencies=? +project.keywords=? + +author.name=Andreas Goransson +author.url= + +tested.platform=linux, windows +tested.processingversion=1.5.1 + +# recommendations for storing your source code online are: code.google or github. + +source.host=github +source.url=https://github.com/agoransson/JSON-processing +source.repository=https://github.com/agoransson/JSON-processing + + +# include javadoc references into your project's javadoc + +javadoc.java.href= +#http://java.sun.com/javase/6/docs/api/ +javadoc.processing.href= +#http://dev.processing.org/reference/everything/javadoc/ + diff --git a/src/org/json/CDL.java b/src/org/json/CDL.java index ffe2ace8b..4d82f25c0 100644 --- a/src/org/json/CDL.java +++ b/src/org/json/CDL.java @@ -72,7 +72,7 @@ private static String getValue(JSONTokener x) throws JSONException { break; } if (c == 0 || c == '\n' || c == '\r') { - throw x.syntaxError("Missing close quote '" + q + "'."); +// throw x.syntaxError("Missing close quote '" + q + "'."); } sb.append(c); } @@ -92,8 +92,8 @@ private static String getValue(JSONTokener x) throws JSONException { * @return A JSONArray of strings. * @throws JSONException */ - public static JSONArray rowToJSONArray(JSONTokener x) throws JSONException { - JSONArray ja = new JSONArray(); + public static JSONArr rowToJSONArray(JSONTokener x) throws JSONException { + JSONArr ja = new JSONArr(); for (;;) { String value = getValue(x); char c = x.next(); @@ -110,8 +110,8 @@ public static JSONArray rowToJSONArray(JSONTokener x) throws JSONException { if (c == '\n' || c == '\r' || c == 0) { return ja; } - throw x.syntaxError("Bad character '" + c + "' (" + - (int)c + ")."); +// throw x.syntaxError("Bad character '" + c + "' (" + +// (int)c + ")."); } c = x.next(); } @@ -128,9 +128,9 @@ public static JSONArray rowToJSONArray(JSONTokener x) throws JSONException { * @return A JSONObject combining the names and values. * @throws JSONException */ - public static JSONObject rowToJSONObject(JSONArray names, JSONTokener x) + public static JSONObj rowToJSONObject(JSONArr names, JSONTokener x) throws JSONException { - JSONArray ja = rowToJSONArray(x); + JSONArr ja = rowToJSONArray(x); return ja != null ? ja.toJSONObject(names) : null; } @@ -141,7 +141,7 @@ public static JSONObject rowToJSONObject(JSONArray names, JSONTokener x) * @param ja A JSONArray of strings. * @return A string ending in NEWLINE. */ - public static String rowToString(JSONArray ja) { + public static String rowToString(JSONArr ja) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < ja.length(); i += 1) { if (i > 0) { @@ -178,7 +178,7 @@ public static String rowToString(JSONArray ja) { * @return A JSONArray of JSONObjects. * @throws JSONException */ - public static JSONArray toJSONArray(String string) throws JSONException { + public static JSONArr toJSONArray(String string) throws JSONException { return toJSONArray(new JSONTokener(string)); } @@ -189,7 +189,7 @@ public static JSONArray toJSONArray(String string) throws JSONException { * @return A JSONArray of JSONObjects. * @throws JSONException */ - public static JSONArray toJSONArray(JSONTokener x) throws JSONException { + public static JSONArr toJSONArray(JSONTokener x) throws JSONException { return toJSONArray(rowToJSONArray(x), x); } @@ -201,7 +201,7 @@ public static JSONArray toJSONArray(JSONTokener x) throws JSONException { * @return A JSONArray of JSONObjects. * @throws JSONException */ - public static JSONArray toJSONArray(JSONArray names, String string) + public static JSONArr toJSONArray(JSONArr names, String string) throws JSONException { return toJSONArray(names, new JSONTokener(string)); } @@ -214,14 +214,14 @@ public static JSONArray toJSONArray(JSONArray names, String string) * @return A JSONArray of JSONObjects. * @throws JSONException */ - public static JSONArray toJSONArray(JSONArray names, JSONTokener x) + public static JSONArr toJSONArray(JSONArr names, JSONTokener x) throws JSONException { if (names == null || names.length() == 0) { return null; } - JSONArray ja = new JSONArray(); + JSONArr ja = new JSONArr(); for (;;) { - JSONObject jo = rowToJSONObject(names, x); + JSONObj jo = rowToJSONObject(names, x); if (jo == null) { break; } @@ -242,10 +242,10 @@ public static JSONArray toJSONArray(JSONArray names, JSONTokener x) * @return A comma delimited text. * @throws JSONException */ - public static String toString(JSONArray ja) throws JSONException { - JSONObject jo = ja.optJSONObject(0); + public static String toString(JSONArr ja) throws JSONException { + JSONObj jo = ja.optJSONObject(0); if (jo != null) { - JSONArray names = jo.names(); + JSONArr names = jo.names(); if (names != null) { return rowToString(names) + toString(names, ja); } @@ -262,14 +262,14 @@ public static String toString(JSONArray ja) throws JSONException { * @return A comma delimited text. * @throws JSONException */ - public static String toString(JSONArray names, JSONArray ja) + public static String toString(JSONArr names, JSONArr ja) throws JSONException { if (names == null || names.length() == 0) { return null; } StringBuffer sb = new StringBuffer(); for (int i = 0; i < ja.length(); i += 1) { - JSONObject jo = ja.optJSONObject(i); + JSONObj jo = ja.optJSONObject(i); if (jo != null) { sb.append(rowToString(jo.toJSONArray(names))); } diff --git a/src/org/json/Cookie.java b/src/org/json/Cookie.java index a2d9c4ed9..0222ef740 100644 --- a/src/org/json/Cookie.java +++ b/src/org/json/Cookie.java @@ -78,10 +78,10 @@ public static String escape(String string) { * members. * @throws JSONException */ - public static JSONObject toJSONObject(String string) throws JSONException { + public static JSONObj toJSONObject(String string) throws JSONException { String name; - JSONObject jo = new JSONObject(); - Object value; + JSONObj jo = new JSONObj(); + Object value = null; JSONTokener x = new JSONTokener(string); jo.put("name", x.nextTo('=')); x.next('='); @@ -93,7 +93,7 @@ public static JSONObject toJSONObject(String string) throws JSONException { if (name.equals("secure")) { value = Boolean.TRUE; } else { - throw x.syntaxError("Missing '=' in cookie parameter."); +// throw x.syntaxError("Missing '=' in cookie parameter."); } } else { value = unescape(x.nextTo(';')); @@ -115,7 +115,7 @@ public static JSONObject toJSONObject(String string) throws JSONException { * @return A cookie specification string * @throws JSONException */ - public static String toString(JSONObject jo) throws JSONException { + public static String toString(JSONObj jo) throws JSONException { StringBuffer sb = new StringBuffer(); sb.append(escape(jo.getString("name"))); diff --git a/src/org/json/CookieList.java b/src/org/json/CookieList.java index 1111135f3..70c14cd48 100644 --- a/src/org/json/CookieList.java +++ b/src/org/json/CookieList.java @@ -46,8 +46,8 @@ public class CookieList { * @return A JSONObject * @throws JSONException */ - public static JSONObject toJSONObject(String string) throws JSONException { - JSONObject jo = new JSONObject(); + public static JSONObj toJSONObject(String string) throws JSONException { + JSONObj jo = new JSONObj(); JSONTokener x = new JSONTokener(string); while (x.more()) { String name = Cookie.unescape(x.nextTo('=')); @@ -68,7 +68,7 @@ public static JSONObject toJSONObject(String string) throws JSONException { * @return A cookie list string * @throws JSONException */ - public static String toString(JSONObject jo) throws JSONException { + public static String toString(JSONObj jo) throws JSONException { boolean b = false; Iterator keys = jo.keys(); String string; diff --git a/src/org/json/HTTP.java b/src/org/json/HTTP.java index e01675bc5..5db4e896a 100644 --- a/src/org/json/HTTP.java +++ b/src/org/json/HTTP.java @@ -68,8 +68,8 @@ public class HTTP { * of the XML string. * @throws JSONException */ - public static JSONObject toJSONObject(String string) /*throws JSONException*/ { - JSONObject jo = new JSONObject(); + public static JSONObj toJSONObject(String string) /*throws JSONException*/ { + JSONObj jo = new JSONObj(); HTTPTokener x = new HTTPTokener(string); String token = null; @@ -131,7 +131,7 @@ public static JSONObject toJSONObject(String string) /*throws JSONException*/ { * @throws JSONException if the object does not contain enough * information. */ - public static String toString(JSONObject jo) /*throws JSONException*/ { + public static String toString(JSONObj jo) /*throws JSONException*/ { Iterator keys = jo.keys(); String string; StringBuffer sb = new StringBuffer(); diff --git a/src/org/json/HTTPTokener.java b/src/org/json/HTTPTokener.java index 86fed61d7..8f6703520 100644 --- a/src/org/json/HTTPTokener.java +++ b/src/org/json/HTTPTokener.java @@ -58,7 +58,7 @@ public String nextToken() throws JSONException { for (;;) { c = next(); if (c < ' ') { - throw syntaxError("Unterminated string."); +// throw syntaxError("Unterminated string."); } if (c == q) { return sb.toString(); diff --git a/src/org/json/JSON.java b/src/org/json/JSON.java new file mode 100644 index 000000000..a9e93f707 --- /dev/null +++ b/src/org/json/JSON.java @@ -0,0 +1,3298 @@ +package org.json; + +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.StringWriter; +import java.io.Writer; +import java.lang.reflect.Array; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +/** + * This is a "mashup" test for combining the two JSON types, the goal is to make + * it work similarly to how the processing XML library works. + * + * loadJSON(); should be able of returning both types of objects, and to do that + * without having the typecast you need to combine the two classes somehow. + * + * The way you use this is calling JSON.loadJSON("filename"); (or similar) and + * then the class will maintain the type of object it is (either array or + * object) and simply forward the requests the user does to the correct class... + * of course making sure that the type is of correct class! You shouldn't be + * able of calling ".get(index)" on an JSONObject for example... it should then + * notify the user by a simple text message to the console. + * + * @author ksango + * + */ +public class JSON { + /* + * Defines the type of object + */ + public enum JSONType { + OBJECT, ARRAY, NULL + }; + + protected JSONType type; + + private static JSONObject obj; + private static JSONArray arr; + + protected JSON(){ + // Empty, used for inner classes + } + + /** + * Constructor for JSONTokeners. + * + * @param tokener + */ + public JSON(JSONTokener tokener) { + + } + + /** + * Open a json file + * + * @param json + * + * @return + */ + public static JSON parse(String filename) { + InputStream input = null; + try { + input = new FileInputStream(filename); + } catch (FileNotFoundException e1) { + throw new RuntimeException("Failed to find file " + filename); + } + + JSONTokener tokener = new JSONTokener(input); + + if (tokener.nextClean() == '{') { + tokener.back(); + try { + obj = new JSONObject(tokener); + obj.type = JSONType.OBJECT; + return obj; + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException("Failed to create JSONObject"); + } + } + tokener.back(); + + if (tokener.nextClean() == '[') { + tokener.back(); + try { + arr = new JSONArray(tokener); + arr.type = JSONType.ARRAY; + return arr; + } catch (Exception e) { + throw new RuntimeException("Failed to create JSONArray"); + } + }else{ + throw new RuntimeException("File is neither a JSONObject or a JSONArray"); + } + } + + // JSONObject and JSONArray classes below + + + // JSONObject methods + + //String, Int, Long, Float, Double, Boolean, JSONArray, JSONObject + + public String getString(String key) { + if( type != JSONType.OBJECT ){ + throw new RuntimeException("Not a JSONObject"); + }else{ + return obj.getInnerString(key); + } + } + + public int getInt(String key) { + if( type != JSONType.OBJECT ){ + throw new RuntimeException("Not a JSONObject"); + }else{ + return obj.getInnerInt(key); + } + } + + public float getFloat(String key) { + if( type != JSONType.OBJECT ){ + throw new RuntimeException("Not a JSONObject"); + }else{ + return obj.getInnerFloat(key); + } + } + + public double getDouble(String key) { + if( type != JSONType.OBJECT ){ + throw new RuntimeException("Not a JSONObject"); + }else{ + return obj.getInnerDouble(key); + } + } + + public boolean getBoolean(String key) { + if( type != JSONType.OBJECT ){ + throw new RuntimeException("Not a JSONObject"); + }else{ + return obj.getInnerBoolean(key); + } + } + + public JSONObject getJSONObject(String key) { + if( type != JSONType.OBJECT ){ + throw new RuntimeException("Not a JSONObject"); + }else{ + return obj.getInnerJSONObject(key); + } + } + + public JSONArray getJSONArray(String key) { + if( type != JSONType.OBJECT ){ + throw new RuntimeException("Not a JSONObject"); + }else{ + return obj.getInnerJSONArray(key); + } + } + + //JSONArray methods + public String getString(int index){ + if( type != JSONType.ARRAY ){ + throw new RuntimeException("Not a JSONArray"); + }else{ + return arr.getInnerString(index); + } + } + + public int getInt(int index){ + if( type != JSONType.ARRAY ){ + throw new RuntimeException("Not a JSONArray"); + }else{ + return arr.getInnerInt(index); + } + } + + public float getFloat(int index){ + if( type != JSONType.ARRAY ){ + throw new RuntimeException("Not a JSONArray"); + }else{ + return arr.getInnerFloat(index); + } + } + + public double getDouble(int index){ + if( type != JSONType.ARRAY ){ + throw new RuntimeException("Not a JSONArray"); + }else{ + return arr.getInnerDouble(index); + } + } + + public boolean getBoolean(int index){ + if( type != JSONType.ARRAY ){ + throw new RuntimeException("Not a JSONArray"); + }else{ + return arr.getInnerBoolean(index); + } + } + + public JSONArray getArray(int index){ + if( type != JSONType.ARRAY ){ + throw new RuntimeException("Not a JSONArray"); + }else{ + return arr.getInnerArray(index); + } + } + + public JSONObject getObject(int index){ + if( type != JSONType.ARRAY ){ + throw new RuntimeException("Not a JSONArray"); + }else{ + return arr.getInnerObject(index); + } + } + + /** + * JSONObject.NULL is equivalent to the value that JavaScript calls null, + * whilst Java's null is equivalent to the value that JavaScript calls + * undefined. + */ + private static final class Null extends JSON { + + /** + * There is only intended to be a single instance of the NULL object, so + * the clone method returns itself. + * + * @return NULL. + */ + @Override + protected final Object clone() { + return this; + } + + /** + * A Null object is equal to the null value and to itself. + * + * @param object + * An object to test for nullness. + * @return true if the object parameter is the JSONObject.NULL object or + * null. + */ + @Override + public boolean equals(Object object) { + return object == null || object == this; + } + + /** + * Get the "null" string value. + * + * @return The string "null". + */ + @Override + public String toString() { + return "null"; + } + + @Override + public int hashCode() { + // TODO Auto-generated method stub + return super.hashCode(); + } + } + + /** + * It is sometimes more convenient and less ambiguous to have a + * NULL object than to use Java's null value. + * JSONObject.NULL.equals(null) returns true. + * JSONObject.NULL.toString() returns "null". + */ + public static final Object NULL = new Null(); + + /** + * A JSONObject is an unordered collection of name/value pairs. Its external + * form is a string wrapped in curly braces with colons between the names and + * values, and commas between the values and names. The internal form is an + * object having get and opt methods for accessing the + * values by name, and put methods for adding or replacing values + * by name. The values can be any of these types: Boolean, + * JSONArray, JSONObject, Number, + * String, or the JSONObject.NULL object. A JSONObject + * constructor can be used to convert an external form JSON text into an + * internal form whose values can be retrieved with the get and + * opt methods, or to convert values into a JSON text using the + * put and toString methods. A get method + * returns a value if one can be found, and throws an exception if one cannot be + * found. An opt method returns a default value instead of throwing + * an exception, and so is useful for obtaining optional values. + *

+ * The generic get() and opt() methods return an + * object, which you can cast or query for type. There are also typed + * get and opt methods that do type checking and type + * coercion for you. The opt methods differ from the get methods in that they do + * not throw. Instead, they return a specified value, such as null. + *

+ * The put methods add or replace values in an object. For example, + * + *

+	 * myString = new JSONObject().put("JSON", "Hello, World!").toString();
+	 * 
+ * + * produces the string {"JSON": "Hello, World"}. + *

+ * The texts produced by the toString methods strictly conform to + * the JSON syntax rules. The constructors are more forgiving in the texts they + * will accept: + *

    + *
  • An extra , (comma) may appear just + * before the closing brace.
  • + *
  • Strings may be quoted with ' (single + * quote).
  • + *
  • Strings do not need to be quoted at all if they do not begin with a quote + * or single quote, and if they do not contain leading or trailing spaces, and + * if they do not contain any of these characters: + * { } [ ] / \ : , = ; # and if they do not look like numbers and + * if they are not the reserved words true, false, or + * null.
  • + *
  • Keys can be followed by = or => as well as by + * :.
  • + *
  • Values can be followed by ; (semicolon) as + * well as by , (comma).
  • + *
+ * + * @author JSON.org + * @version 2012-12-01 + */ + static class JSONObject extends JSON { + /** + * The maximum number of keys in the key pool. + */ + private static final int keyPoolSize = 100; + + /** + * Key pooling is like string interning, but without permanently tying up + * memory. To help conserve memory, storage of duplicated key strings in + * JSONObjects will be avoided by using a key pool to manage unique key + * string objects. This is used by JSONObject.put(string, object). + */ + static HashMap keyPool = new HashMap(keyPoolSize); + + + // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + +// /** +// * JSONObject.NULL is equivalent to the value that JavaScript calls null, +// * whilst Java's null is equivalent to the value that JavaScript calls +// * undefined. +// */ +// private static final class Null { +// +// /** +// * There is only intended to be a single instance of the NULL object, +// * so the clone method returns itself. +// * @return NULL. +// */ +// @Override +// protected final Object clone() { +// return this; +// } +// +// /** +// * A Null object is equal to the null value and to itself. +// * @param object An object to test for nullness. +// * @return true if the object parameter is the JSONObject.NULL object +// * or null. +// */ +// @Override +// public boolean equals(Object object) { +// return object == null || object == this; +// } +// +// /** +// * Get the "null" string value. +// * @return The string "null". +// */ +// @Override +// public String toString() { +// return "null"; +// } +// +// @Override +// public int hashCode() { +// // TODO Auto-generated method stub +// return super.hashCode(); +// } +// } + + + // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + /** + * The map where the JSONObject's properties are kept. + */ + // private final Map map; + private final HashMap map; + + +// /** +// * It is sometimes more convenient and less ambiguous to have a +// * NULL object than to use Java's null value. +// * JSONObject.NULL.equals(null) returns true. +// * JSONObject.NULL.toString() returns "null". +// */ +// public static final Object NULL = new Null(); + + + /** + * Construct an empty JSONObject. + */ + public JSONObject() { + this.map = new HashMap(); + } + + + // /** + // * Construct a JSONObject from a subset of another JSONObject. + // * An array of strings is used to identify the keys that should be copied. + // * Missing keys are ignored. + // * @param jo A JSONObject. + // * @param names An array of strings. + // * @throws JSONException + // * @exception JSONException If a value is a non-finite number or if a name is duplicated. + // */ + // public JSONObject(JSONObject jo, String[] names) { +// this(); +// for (int i = 0; i < names.length; i += 1) { +// try { +// this.putOnce(names[i], jo.opt(names[i])); +// } catch (Exception ignore) { +// } +// } + // } + + + /** + * Construct a JSONObject from a JSONTokener. + * @param x A JSONTokener object containing the source string. + * @throws JSONException If there is a syntax error in the source string + * or a duplicated key. + */ + protected JSONObject(JSONTokener x) { + this(); + char c; + String key; + + if (x.nextClean() != '{') { + throw new RuntimeException("A JSONObject text must begin with '{'"); + } + for (;;) { + c = x.nextClean(); + switch (c) { + case 0: + throw new RuntimeException("A JSONObject text must end with '}'"); + case '}': + return; + default: + x.back(); + key = x.nextValue().toString(); + } + + // The key is followed by ':'. We will also tolerate '=' or '=>'. + + c = x.nextClean(); + if (c == '=') { + if (x.next() != '>') { + x.back(); + } + } else if (c != ':') { + throw new RuntimeException("Expected a ':' after a key"); + } + this.putOnce(key, x.nextValue()); + + // Pairs are separated by ','. We will also tolerate ';'. + + switch (x.nextClean()) { + case ';': + case ',': + if (x.nextClean() == '}') { + return; + } + x.back(); + break; + case '}': + return; + default: + throw new RuntimeException("Expected a ',' or '}'"); + } + } + } + + + /** + * Construct a JSONObject from a Map. + * + * @param map A map object that can be used to initialize the contents of + * the JSONObject. + * @throws JSONException + */ + protected JSONObject(HashMap map) { + this.map = new HashMap(); + if (map != null) { + Iterator i = map.entrySet().iterator(); + while (i.hasNext()) { + Map.Entry e = (Map.Entry) i.next(); + Object value = e.getValue(); + if (value != null) { + map.put((String) e.getKey(), wrap(value)); + } + } + } + } + + + /** + * Construct a JSONObject from an Object using bean getters. + * It reflects on all of the public methods of the object. + * For each of the methods with no parameters and a name starting + * with "get" or "is" followed by an uppercase letter, + * the method is invoked, and a key and the value returned from the getter method + * are put into the new JSONObject. + * + * The key is formed by removing the "get" or "is" prefix. + * If the second remaining character is not upper case, then the first + * character is converted to lower case. + * + * For example, if an object has a method named "getName", and + * if the result of calling object.getName() is "Larry Fine", + * then the JSONObject will contain "name": "Larry Fine". + * + * @param bean An object that has getter methods that should be used + * to make a JSONObject. + */ + protected JSONObject(Object bean) { + this(); + this.populateMap(bean); + } + + + // holding off on this method until we decide on how to handle reflection + // /** + // * Construct a JSONObject from an Object, using reflection to find the + // * public members. The resulting JSONObject's keys will be the strings + // * from the names array, and the values will be the field values associated + // * with those keys in the object. If a key is not found or not visible, + // * then it will not be copied into the new JSONObject. + // * @param object An object that has fields that should be used to make a + // * JSONObject. + // * @param names An array of strings, the names of the fields to be obtained + // * from the object. + // */ + // public JSONObject(Object object, String names[]) { +// this(); +// Class c = object.getClass(); +// for (int i = 0; i < names.length; i += 1) { +// String name = names[i]; +// try { +// this.putOpt(name, c.getField(name).get(object)); +// } catch (Exception ignore) { +// } +// } + // } + + + /** + * Construct a JSONObject from a source JSON text string. + * This is the most commonly used JSONObject constructor. + * @param source A string beginning + * with { (left brace) and ending + * with } (right brace). + * @exception JSONException If there is a syntax error in the source + * string or a duplicated key. + */ + static public JSONObject parse(String source) { + return new JSONObject(new JSONTokener(source)); + } + + + // /** + // * Construct a JSONObject from a ResourceBundle. + // * @param baseName The ResourceBundle base name. + // * @param locale The Locale to load the ResourceBundle for. + // * @throws JSONException If any JSONExceptions are detected. + // */ + // public JSON(String baseName, Locale locale) { +// this(); +// ResourceBundle bundle = ResourceBundle.getBundle(baseName, locale, +// Thread.currentThread().getContextClassLoader()); + // +// // Iterate through the keys in the bundle. + // +// Enumeration keys = bundle.getKeys(); +// while (keys.hasMoreElements()) { +// Object key = keys.nextElement(); +// if (key instanceof String) { + // +// // Go through the path, ensuring that there is a nested JSONObject for each +// // segment except the last. Add the value using the last segment's name into +// // the deepest nested JSONObject. + // +// String[] path = ((String)key).split("\\."); +// int last = path.length - 1; +// JSON target = this; +// for (int i = 0; i < last; i += 1) { +// String segment = path[i]; +// JSON nextTarget = target.optJSONObject(segment); +// if (nextTarget == null) { +// nextTarget = new JSON(); +// target.put(segment, nextTarget); +// } +// target = nextTarget; +// } +// target.put(path[last], bundle.getString((String)key)); +// } +// } + // } + + + // /** + // * Accumulate values under a key. It is similar to the put method except + // * that if there is already an object stored under the key then a + // * JSONArray is stored under the key to hold all of the accumulated values. + // * If there is already a JSONArray, then the new value is appended to it. + // * In contrast, the put method replaces the previous value. + // * + // * If only one value is accumulated that is not a JSONArray, then the + // * result will be the same as using put. But if multiple values are + // * accumulated, then the result will be like append. + // * @param key A key string. + // * @param value An object to be accumulated under the key. + // * @return this. + // * @throws JSONException If the value is an invalid number + // * or if the key is null. + // */ + // public JSONObject accumulate( +// String key, +// Object value +// ) throws JSONException { +// testValidity(value); +// Object object = this.opt(key); +// if (object == null) { +// this.put(key, value instanceof JSONArray +// ? new JSONArray().put(value) +// : value); +// } else if (object instanceof JSONArray) { +// ((JSONArray)object).put(value); +// } else { +// this.put(key, new JSONArray().put(object).put(value)); +// } +// return this; + // } + + + // /** + // * Append values to the array under a key. If the key does not exist in the + // * JSONObject, then the key is put in the JSONObject with its value being a + // * JSONArray containing the value parameter. If the key was already + // * associated with a JSONArray, then the value parameter is appended to it. + // * @param key A key string. + // * @param value An object to be accumulated under the key. + // * @return this. + // * @throws JSONException If the key is null or if the current value + // * associated with the key is not a JSONArray. + // */ + // public JSONObject append(String key, Object value) throws JSONException { +// testValidity(value); +// Object object = this.opt(key); +// if (object == null) { +// this.put(key, new JSONArray().put(value)); +// } else if (object instanceof JSONArray) { +// this.put(key, ((JSONArray)object).put(value)); +// } else { +// throw new JSONException("JSONObject[" + key + +// "] is not a JSONArray."); +// } +// return this; + // } + + + /** + * Produce a string from a double. The string "null" will be returned if + * the number is not finite. + * @param d A double. + * @return A String. + */ + static protected String doubleToString(double d) { + if (Double.isInfinite(d) || Double.isNaN(d)) { + return "null"; + } + + // Shave off trailing zeros and decimal point, if possible. + + String string = Double.toString(d); + if (string.indexOf('.') > 0 && string.indexOf('e') < 0 && + string.indexOf('E') < 0) { + while (string.endsWith("0")) { + string = string.substring(0, string.length() - 1); + } + if (string.endsWith(".")) { + string = string.substring(0, string.length() - 1); + } + } + return string; + } + + + /** + * Get the value object associated with a key. + * + * @param key A key string. + * @return The object associated with the key. + * @throws JSONException if the key is not found. + */ + private Object get(String key) { + if (key == null) { + throw new RuntimeException("Null key."); + } + Object object = this.opt(key); + if (object == null) { + throw new RuntimeException("JSONObject[" + quote(key) + "] not found."); + } + return object; + } + + + /** + * Get the string associated with a key. + * + * @param key A key string. + * @return A string which is the value. + * @throws JSONException if there is no string value for the key. + */ + public String getInnerString(String key) { + Object object = this.get(key); + if (object instanceof String) { + return (String)object; + } + throw new RuntimeException("JSONObject[" + quote(key) + "] not a string."); + } + + + /** + * Get the int value associated with a key. + * + * @param key A key string. + * @return The integer value. + * @throws JSONException if the key is not found or if the value cannot + * be converted to an integer. + */ + public int getInnerInt(String key) { + Object object = this.get(key); + try { + return object instanceof Number + ? ((Number)object).intValue() + : Integer.parseInt((String)object); + } catch (Exception e) { + throw new RuntimeException("JSONObject[" + quote(key) + "] is not an int."); + } + } + + + /** + * Get the long value associated with a key. + * + * @param key A key string. + * @return The long value. + * @throws JSONException if the key is not found or if the value cannot + * be converted to a long. + */ + public long getInnerLong(String key) { + Object object = this.get(key); + try { + return object instanceof Number + ? ((Number)object).longValue() + : Long.parseLong((String)object); + } catch (Exception e) { + throw new RuntimeException("JSONObject[" + quote(key) + "] is not a long.", e); + } + } + + + public float getInnerFloat(String key) { + return (float) getInnerDouble(key); + } + + + /** + * Get the double value associated with a key. + * @param key A key string. + * @return The numeric value. + * @throws JSONException if the key is not found or + * if the value is not a Number object and cannot be converted to a number. + */ + public double getInnerDouble(String key) { + Object object = this.get(key); + try { + return object instanceof Number + ? ((Number)object).doubleValue() + : Double.parseDouble((String)object); + } catch (Exception e) { + throw new RuntimeException("JSONObject[" + quote(key) + "] is not a number."); + } + } + + + /** + * Get the boolean value associated with a key. + * + * @param key A key string. + * @return The truth. + * @throws JSONException + * if the value is not a Boolean or the String "true" or "false". + */ + public boolean getInnerBoolean(String key) { + Object object = this.get(key); + if (object.equals(Boolean.FALSE) || + (object instanceof String && + ((String)object).equalsIgnoreCase("false"))) { + return false; + } else if (object.equals(Boolean.TRUE) || + (object instanceof String && + ((String)object).equalsIgnoreCase("true"))) { + return true; + } + throw new RuntimeException("JSONObject[" + quote(key) + "] is not a Boolean."); + } + + + /** + * Get the JSONArray value associated with a key. + * + * @param key A key string. + * @return A JSONArray which is the value. + * @throws JSONException if the key is not found or + * if the value is not a JSONArray. + */ + public JSONArray getInnerJSONArray(String key) { + Object object = this.get(key); + if (object instanceof JSONArray) { + return (JSONArray)object; + } + throw new RuntimeException("JSONObject[" + quote(key) + "] is not a JSONArray."); + } + + + /** + * Get the JSONObject value associated with a key. + * + * @param key A key string. + * @return A JSONObject which is the value. + * @throws JSONException if the key is not found or + * if the value is not a JSONObject. + */ + public JSONObject getInnerJSONObject(String key) { + Object object = this.get(key); + if (object instanceof JSONObject) { + return (JSONObject)object; + } + throw new RuntimeException("JSONObject[" + quote(key) + "] is not a JSONObject."); + } + + + // /** + // * Get an array of field names from a JSONObject. + // * + // * @return An array of field names, or null if there are no names. + // */ + // public static String[] getNames(JSONObject jo) { +// int length = jo.length(); +// if (length == 0) { +// return null; +// } +// Iterator iterator = jo.keys(); +// String[] names = new String[length]; +// int i = 0; +// while (iterator.hasNext()) { +// names[i] = (String)iterator.next(); +// i += 1; +// } +// return names; + // } + // + // + // /** + // * Get an array of field names from an Object. + // * + // * @return An array of field names, or null if there are no names. + // */ + // public static String[] getNames(Object object) { +// if (object == null) { +// return null; +// } +// Class klass = object.getClass(); +// Field[] fields = klass.getFields(); +// int length = fields.length; +// if (length == 0) { +// return null; +// } +// String[] names = new String[length]; +// for (int i = 0; i < length; i += 1) { +// names[i] = fields[i].getName(); +// } +// return names; + // } + + + /** + * Determine if the JSONObject contains a specific key. + * @param key A key string. + * @return true if the key exists in the JSONObject. + */ + public boolean hasKey(String key) { + return this.map.containsKey(key); + } + + + // /** + // * Increment a property of a JSONObject. If there is no such property, + // * create one with a value of 1. If there is such a property, and if + // * it is an Integer, Long, Double, or Float, then add one to it. + // * @param key A key string. + // * @return this. + // * @throws JSONException If there is already a property with this name + // * that is not an Integer, Long, Double, or Float. + // */ + // public JSON increment(String key) { +// Object value = this.opt(key); +// if (value == null) { +// this.put(key, 1); +// } else if (value instanceof Integer) { +// this.put(key, ((Integer)value).intValue() + 1); +// } else if (value instanceof Long) { +// this.put(key, ((Long)value).longValue() + 1); +// } else if (value instanceof Double) { +// this.put(key, ((Double)value).doubleValue() + 1); +// } else if (value instanceof Float) { +// this.put(key, ((Float)value).floatValue() + 1); +// } else { +// throw new RuntimeException("Unable to increment [" + quote(key) + "]."); +// } +// return this; + // } + + + /** + * Determine if the value associated with the key is null or if there is + * no value. + * @param key A key string. + * @return true if there is no value associated with the key or if + * the value is the JSONObject.NULL object. + */ + protected boolean isNull(String key) { + return /*JSONObject.*/NULL.equals(this.opt(key)); + } + + + /** + * Get an enumeration of the keys of the JSONObject. + * + * @return An iterator of the keys. + */ + public Iterator keys() { +// return this.keySet().iterator(); + return map.keySet().iterator(); + } + + + // /** + // * Get a set of keys of the JSONObject. + // * + // * @return A keySet. + // */ + // public Set keySet() { +// return this.map.keySet(); + // } + + + /** + * Get the number of keys stored in the JSONObject. + * + * @return The number of keys in the JSONObject. + */ + public int size() { + return this.map.size(); + } + + + // /** + // * Produce a JSONArray containing the names of the elements of this + // * JSONObject. + // * @return A JSONArray containing the key strings, or null if the JSONObject + // * is empty. + // */ + // public JSONArray names() { +// JSONArray ja = new JSONArray(); +// Iterator keys = this.keys(); +// while (keys.hasNext()) { +// ja.append(keys.next()); +// } +// return ja.size() == 0 ? null : ja; + // } + + + /** + * Produce a string from a Number. + * @param number A Number + * @return A String. + * @throws JSONException If n is a non-finite number. + */ + private static String numberToString(Number number) { + if (number == null) { + throw new RuntimeException("Null pointer"); + } + testValidity(number); + + // Shave off trailing zeros and decimal point, if possible. + + String string = number.toString(); + if (string.indexOf('.') > 0 && string.indexOf('e') < 0 && + string.indexOf('E') < 0) { + while (string.endsWith("0")) { + string = string.substring(0, string.length() - 1); + } + if (string.endsWith(".")) { + string = string.substring(0, string.length() - 1); + } + } + return string; + } + + + /** + * Get an optional value associated with a key. + * @param key A key string. + * @return An object which is the value, or null if there is no value. + */ + private Object opt(String key) { + return key == null ? null : this.map.get(key); + } + + + // /** + // * Get an optional boolean associated with a key. + // * It returns false if there is no such key, or if the value is not + // * Boolean.TRUE or the String "true". + // * + // * @param key A key string. + // * @return The truth. + // */ + // private boolean optBoolean(String key) { +// return this.optBoolean(key, false); + // } + + + // /** + // * Get an optional boolean associated with a key. + // * It returns the defaultValue if there is no such key, or if it is not + // * a Boolean or the String "true" or "false" (case insensitive). + // * + // * @param key A key string. + // * @param defaultValue The default. + // * @return The truth. + // */ + // private boolean optBoolean(String key, boolean defaultValue) { +// try { +// return this.getBoolean(key); +// } catch (Exception e) { +// return defaultValue; +// } + // } + + + // /** + // * Get an optional double associated with a key, + // * or NaN if there is no such key or if its value is not a number. + // * If the value is a string, an attempt will be made to evaluate it as + // * a number. + // * + // * @param key A string which is the key. + // * @return An object which is the value. + // */ + // private double optDouble(String key) { +// return this.optDouble(key, Double.NaN); + // } + + + // /** + // * Get an optional double associated with a key, or the + // * defaultValue if there is no such key or if its value is not a number. + // * If the value is a string, an attempt will be made to evaluate it as + // * a number. + // * + // * @param key A key string. + // * @param defaultValue The default. + // * @return An object which is the value. + // */ + // private double optDouble(String key, double defaultValue) { +// try { +// return this.getDouble(key); +// } catch (Exception e) { +// return defaultValue; +// } + // } + + + // /** + // * Get an optional int value associated with a key, + // * or zero if there is no such key or if the value is not a number. + // * If the value is a string, an attempt will be made to evaluate it as + // * a number. + // * + // * @param key A key string. + // * @return An object which is the value. + // */ + // private int optInt(String key) { +// return this.optInt(key, 0); + // } + + + // /** + // * Get an optional int value associated with a key, + // * or the default if there is no such key or if the value is not a number. + // * If the value is a string, an attempt will be made to evaluate it as + // * a number. + // * + // * @param key A key string. + // * @param defaultValue The default. + // * @return An object which is the value. + // */ + // private int optInt(String key, int defaultValue) { +// try { +// return this.getInt(key); +// } catch (Exception e) { +// return defaultValue; +// } + // } + + + // /** + // * Get an optional JSONArray associated with a key. + // * It returns null if there is no such key, or if its value is not a + // * JSONArray. + // * + // * @param key A key string. + // * @return A JSONArray which is the value. + // */ + // private JSONArray optJSONArray(String key) { +// Object o = this.opt(key); +// return o instanceof JSONArray ? (JSONArray)o : null; + // } + + + // /** + // * Get an optional JSONObject associated with a key. + // * It returns null if there is no such key, or if its value is not a + // * JSONObject. + // * + // * @param key A key string. + // * @return A JSONObject which is the value. + // */ + // private JSONObject optJSONObject(String key) { +// Object object = this.opt(key); +// return object instanceof JSONObject ? (JSONObject)object : null; + // } + + + // /** + // * Get an optional long value associated with a key, + // * or zero if there is no such key or if the value is not a number. + // * If the value is a string, an attempt will be made to evaluate it as + // * a number. + // * + // * @param key A key string. + // * @return An object which is the value. + // */ + // public long optLong(String key) { +// return this.optLong(key, 0); + // } + + + // /** + // * Get an optional long value associated with a key, + // * or the default if there is no such key or if the value is not a number. + // * If the value is a string, an attempt will be made to evaluate it as + // * a number. + // * + // * @param key A key string. + // * @param defaultValue The default. + // * @return An object which is the value. + // */ + // public long optLong(String key, long defaultValue) { +// try { +// return this.getLong(key); +// } catch (Exception e) { +// return defaultValue; +// } + // } + + + // /** + // * Get an optional string associated with a key. + // * It returns an empty string if there is no such key. If the value is not + // * a string and is not null, then it is converted to a string. + // * + // * @param key A key string. + // * @return A string which is the value. + // */ + // public String optString(String key) { +// return this.optString(key, ""); + // } + + + // /** + // * Get an optional string associated with a key. + // * It returns the defaultValue if there is no such key. + // * + // * @param key A key string. + // * @param defaultValue The default. + // * @return A string which is the value. + // */ + // public String optString(String key, String defaultValue) { +// Object object = this.opt(key); +// return NULL.equals(object) ? defaultValue : object.toString(); + // } + + + private void populateMap(Object bean) { + Class klass = bean.getClass(); + + // If klass is a System class then set includeSuperClass to false. + + boolean includeSuperClass = klass.getClassLoader() != null; + + Method[] methods = includeSuperClass + ? klass.getMethods() + : klass.getDeclaredMethods(); + for (int i = 0; i < methods.length; i += 1) { + try { + Method method = methods[i]; + if (Modifier.isPublic(method.getModifiers())) { + String name = method.getName(); + String key = ""; + if (name.startsWith("get")) { + if ("getClass".equals(name) || + "getDeclaringClass".equals(name)) { + key = ""; + } else { + key = name.substring(3); + } + } else if (name.startsWith("is")) { + key = name.substring(2); + } + if (key.length() > 0 && + Character.isUpperCase(key.charAt(0)) && + method.getParameterTypes().length == 0) { + if (key.length() == 1) { + key = key.toLowerCase(); + } else if (!Character.isUpperCase(key.charAt(1))) { + key = key.substring(0, 1).toLowerCase() + + key.substring(1); + } + + Object result = method.invoke(bean, (Object[])null); + if (result != null) { + this.map.put(key, wrap(result)); + } + } + } + } catch (Exception ignore) { + } + } + } + + + public JSONObject setString(String key, String value) { + return put(key, value); + } + + + /** + * Put a key/int pair in the JSONObject. + * + * @param key A key string. + * @param value An int which is the value. + * @return this. + * @throws JSONException If the key is null. + */ + public JSONObject setInt(String key, int value) { + this.put(key, new Integer(value)); + return this; + } + + + /** + * Put a key/long pair in the JSONObject. + * + * @param key A key string. + * @param value A long which is the value. + * @return this. + * @throws JSONException If the key is null. + */ + public JSONObject setLong(String key, long value) { + this.put(key, new Long(value)); + return this; + } + + + public JSONObject setFloat(String key, float value) { + this.put(key, new Double(value)); + return this; + } + + + /** + * Put a key/double pair in the JSONObject. + * + * @param key A key string. + * @param value A double which is the value. + * @return this. + * @throws JSONException If the key is null or if the number is invalid. + */ + public JSONObject setDouble(String key, double value) { + this.put(key, new Double(value)); + return this; + } + + + /** + * Put a key/boolean pair in the JSONObject. + * + * @param key A key string. + * @param value A boolean which is the value. + * @return this. + * @throws JSONException If the key is null. + */ + public JSONObject setBoolean(String key, boolean value) { + this.put(key, value ? Boolean.TRUE : Boolean.FALSE); + return this; + } + + + public JSONObject setJSONObject(String key, JSONObject/*String*/ value) { + return put(key, value); + } + + + public JSONObject setJSONArray(String key, JSONArray/*String*/ value) { + return put(key, value); + } + + + // /** + // * Put a key/value pair in the JSONObject, where the value will be a + // * JSONArray which is produced from a Collection. + // * @param key A key string. + // * @param value A Collection value. + // * @return this. + // * @throws JSONException + // */ + // public JSONObject put(String key, Collection value) { +// this.put(key, new JSONArray(value)); +// return this; + // } + + + // /** + // * Put a key/value pair in the JSONObject, where the value will be a + // * JSONObject which is produced from a Map. + // * @param key A key string. + // * @param value A Map value. + // * @return this. + // * @throws JSONException + // */ + // //public JSONObject put(String key, HashMap value) { + // public JSONObject put(String key, Map value) { +// this.put(key, new JSONObject(value)); +// return this; + // } + + + /** + * Put a key/value pair in the JSONObject. If the value is null, + * then the key will be removed from the JSONObject if it is present. + * @param key A key string. + * @param value An object which is the value. It should be of one of these + * types: Boolean, Double, Integer, JSONArray, JSONObject, Long, String, + * or the JSONObject.NULL object. + * @return this. + * @throws JSONException If the value is non-finite number + * or if the key is null. + */ + private JSONObject put(String key, Object value) { + String pooled; + if (key == null) { + throw new RuntimeException("Null key."); + } + if (value != null) { + testValidity(value); + pooled = (String)keyPool.get(key); + if (pooled == null) { + if (keyPool.size() >= keyPoolSize) { + keyPool = new HashMap(keyPoolSize); + } + keyPool.put(key, key); + } else { + key = pooled; + } + this.map.put(key, value); + } else { + this.remove(key); + } + return this; + } + + + /** + * Put a key/value pair in the JSONObject, but only if the key and the + * value are both non-null, and only if there is not already a member + * with that name. + * @param key + * @param value + * @return his. + * @throws JSONException if the key is a duplicate + */ + private JSONObject putOnce(String key, Object value) { + if (key != null && value != null) { + if (this.opt(key) != null) { + throw new RuntimeException("Duplicate key \"" + key + "\""); + } + this.put(key, value); + } + return this; + } + + + // /** + // * Put a key/value pair in the JSONObject, but only if the + // * key and the value are both non-null. + // * @param key A key string. + // * @param value An object which is the value. It should be of one of these + // * types: Boolean, Double, Integer, JSONArray, JSONObject, Long, String, + // * or the JSONObject.NULL object. + // * @return this. + // * @throws JSONException If the value is a non-finite number. + // */ + // public JSONObject putOpt(String key, Object value) { +// if (key != null && value != null) { +// this.put(key, value); +// } +// return this; + // } + + + /** + * Produce a string in double quotes with backslash sequences in all the + * right places. A backslash will be inserted within = '\u0080' && c < '\u00a0') + || (c >= '\u2000' && c < '\u2100')) { + w.write("\\u"); + hhhh = Integer.toHexString(c); + w.write("0000", 0, 4 - hhhh.length()); + w.write(hhhh); + } else { + w.write(c); + } + } + } + w.write('"'); + return w; + } + + + /** + * Remove a name and its value, if present. + * @param key The name to be removed. + * @return The value that was associated with the name, + * or null if there was no value. + */ + public Object remove(String key) { + return this.map.remove(key); + } + + + /** + * Try to convert a string into a number, boolean, or null. If the string + * can't be converted, return the string. + * @param string A String. + * @return A simple JSON value. + */ + static protected Object stringToValue(String string) { + Double d; + if (string.equals("")) { + return string; + } + if (string.equalsIgnoreCase("true")) { + return Boolean.TRUE; + } + if (string.equalsIgnoreCase("false")) { + return Boolean.FALSE; + } + if (string.equalsIgnoreCase("null")) { + return /*JSONObject.*/NULL; + } + + /* + * If it might be a number, try converting it. + * If a number cannot be produced, then the value will just + * be a string. Note that the plus and implied string + * conventions are non-standard. A JSON parser may accept + * non-JSON forms as long as it accepts all correct JSON forms. + */ + + char b = string.charAt(0); + if ((b >= '0' && b <= '9') || b == '.' || b == '-' || b == '+') { + try { + if (string.indexOf('.') > -1 || + string.indexOf('e') > -1 || string.indexOf('E') > -1) { + d = Double.valueOf(string); + if (!d.isInfinite() && !d.isNaN()) { + return d; + } + } else { + Long myLong = new Long(string); + if (myLong.longValue() == myLong.intValue()) { + return new Integer(myLong.intValue()); + } else { + return myLong; + } + } + } catch (Exception ignore) { + } + } + return string; + } + + + /** + * Throw an exception if the object is a NaN or infinite number. + * @param o The object to test. + * @throws JSONException If o is a non-finite number. + */ + static protected void testValidity(Object o) { + if (o != null) { + if (o instanceof Double) { + if (((Double)o).isInfinite() || ((Double)o).isNaN()) { + throw new RuntimeException( + "JSON does not allow non-finite numbers."); + } + } else if (o instanceof Float) { + if (((Float)o).isInfinite() || ((Float)o).isNaN()) { + throw new RuntimeException( + "JSON does not allow non-finite numbers."); + } + } + } + } + + + // /** + // * Produce a JSONArray containing the values of the members of this + // * JSONObject. + // * @param names A JSONArray containing a list of key strings. This + // * determines the sequence of the values in the result. + // * @return A JSONArray of values. + // * @throws JSONException If any of the values are non-finite numbers. + // */ + // public JSONArray toJSONArray(JSONArray names) { +// if (names == null || names.size() == 0) { +// return null; +// } +// JSONArray ja = new JSONArray(); +// for (int i = 0; i < names.size(); i += 1) { +// ja.append(this.opt(names.getString(i))); +// } +// return ja; + // } + + + /** + * Return the JSON data formatted with two spaces for indents. + * Chosen to do this since it's the most common case (e.g. with println()). + * Same as format(2). Use the format() function for more options. + */ + @Override + public String toString() { + try { + return format(2); + } catch (Exception e) { + return null; + } + } + + + /** + * Make a prettyprinted JSON text of this JSONObject. + *

+ * Warning: This method assumes that the data structure is acyclical. + * @param indentFactor The number of spaces to add to each level of + * indentation. + * @return a printable, displayable, portable, transmittable + * representation of the object, beginning + * with { (left brace) and ending + * with } (right brace). + * @throws JSONException If the object contains an invalid number. + */ + public String format(int indentFactor) { + StringWriter w = new StringWriter(); + synchronized (w.getBuffer()) { + return this.write(w, indentFactor, 0).toString(); + } + } + + /** + * Make a JSON text of an Object value. If the object has an + * value.toJSONString() method, then that method will be used to produce + * the JSON text. The method is required to produce a strictly + * conforming text. If the object does not contain a toJSONString + * method (which is the most common case), then a text will be + * produced by other means. If the value is an array or Collection, + * then a JSONArray will be made from it and its toJSONString method + * will be called. If the value is a MAP, then a JSONObject will be made + * from it and its toJSONString method will be called. Otherwise, the + * value's toString method will be called, and the result will be quoted. + * + *

+ * Warning: This method assumes that the data structure is acyclical. + * @param value The value to be serialized. + * @return a printable, displayable, transmittable + * representation of the object, beginning + * with { (left brace) and ending + * with } (right brace). + * @throws JSONException If the value is or contains an invalid number. + */ + static protected String valueToString(Object value) { + if (value == null || value.equals(null)) { + return "null"; + } +// if (value instanceof JSONString) { +// Object object; +// try { +// object = ((JSONString)value).toJSONString(); +// } catch (Exception e) { +// throw new RuntimeException(e); +// } +// if (object instanceof String) { +// return (String)object; +// } +// throw new RuntimeException("Bad value from toJSONString: " + object); +// } + if (value instanceof Number) { + return numberToString((Number) value); + } + if (value instanceof Boolean || value instanceof JSONObject || + value instanceof JSONArray) { + return value.toString(); + } + if (value instanceof Map) { + return new JSONObject((Map)value).toString(); + } + if (value instanceof Collection) { + return new JSONArray((Collection)value).toString(); + } + if (value.getClass().isArray()) { + return new JSONArray(value).toString(); + } + return quote(value.toString()); + } + + /** + * Wrap an object, if necessary. If the object is null, return the NULL + * object. If it is an array or collection, wrap it in a JSONArray. If + * it is a map, wrap it in a JSONObject. If it is a standard property + * (Double, String, et al) then it is already wrapped. Otherwise, if it + * comes from one of the java packages, turn it into a string. And if + * it doesn't, try to wrap it in a JSONObject. If the wrapping fails, + * then null is returned. + * + * @param object The object to wrap + * @return The wrapped value + */ + static protected Object wrap(Object object) { + try { + if (object == null) { + return NULL; + } + if (object instanceof JSONObject || object instanceof JSONArray || + NULL.equals(object) || /*object instanceof JSONString ||*/ + object instanceof Byte || object instanceof Character || + object instanceof Short || object instanceof Integer || + object instanceof Long || object instanceof Boolean || + object instanceof Float || object instanceof Double || + object instanceof String) { + return object; + } + + if (object instanceof Collection) { + return new JSONArray((Collection)object); + } + if (object.getClass().isArray()) { + return new JSONArray(object); + } + if (object instanceof Map) { + return new JSONObject((Map)object); + } + Package objectPackage = object.getClass().getPackage(); + String objectPackageName = objectPackage != null + ? objectPackage.getName() + : ""; + if ( + objectPackageName.startsWith("java.") || + objectPackageName.startsWith("javax.") || + object.getClass().getClassLoader() == null + ) { + return object.toString(); + } + return new JSONObject(object); + } catch(Exception exception) { + return null; + } + } + + + /** + * Write the contents of the JSONObject as JSON text to a writer. + * For compactness, no whitespace is added. + *

+ * Warning: This method assumes that the data structure is acyclical. + * + * @return The writer. + * @throws JSONException + */ + protected Writer write(Writer writer) { + return this.write(writer, 0, 0); + } + + + static final Writer writeValue(Writer writer, Object value, + int indentFactor, int indent) throws IOException { + if (value == null || value.equals(null)) { + writer.write("null"); + } else if (value instanceof JSONObject) { + ((JSONObject) value).write(writer, indentFactor, indent); + } else if (value instanceof JSONArray) { + ((JSONArray) value).write(writer, indentFactor, indent); + } else if (value instanceof Map) { + new JSONObject((Map) value).write(writer, indentFactor, indent); + } else if (value instanceof Collection) { + new JSONArray((Collection) value).write(writer, indentFactor, + indent); + } else if (value.getClass().isArray()) { + new JSONArray(value).write(writer, indentFactor, indent); + } else if (value instanceof Number) { + writer.write(numberToString((Number) value)); + } else if (value instanceof Boolean) { + writer.write(value.toString()); + /* + } else if (value instanceof JSONString) { + Object o; + try { + o = ((JSONString) value).toJSONString(); + } catch (Exception e) { + throw new RuntimeException(e); + } + writer.write(o != null ? o.toString() : quote(value.toString())); + */ + } else { + quote(value.toString(), writer); + } + return writer; + } + + + static final void indent(Writer writer, int indent) throws IOException { + for (int i = 0; i < indent; i += 1) { + writer.write(' '); + } + } + + /** + * Write the contents of the JSONObject as JSON text to a writer. For + * compactness, no whitespace is added. + *

+ * Warning: This method assumes that the data structure is acyclical. + * + * @return The writer. + * @throws JSONException + */ + protected Writer write(Writer writer, int indentFactor, int indent) { + try { + boolean commanate = false; + final int length = this.size(); + Iterator keys = this.keys(); + writer.write('{'); + + int actualFactor = (indentFactor == -1) ? 0 : indentFactor; + + if (length == 1) { + Object key = keys.next(); + writer.write(quote(key.toString())); + writer.write(':'); + if (actualFactor > 0) { + writer.write(' '); + } + writeValue(writer, this.map.get(key), actualFactor, indent); + } else if (length != 0) { + final int newindent = indent + actualFactor; + while (keys.hasNext()) { + Object key = keys.next(); + if (commanate) { + writer.write(','); + } + if (indentFactor != -1) { + writer.write('\n'); + } + indent(writer, newindent); + writer.write(quote(key.toString())); + writer.write(':'); + if (actualFactor > 0) { + writer.write(' '); + } + writeValue(writer, this.map.get(key), actualFactor, + newindent); + commanate = true; + } + if (indentFactor != -1) { + writer.write('\n'); + } + indent(writer, indent); + } + writer.write('}'); + return writer; + } catch (IOException exception) { + throw new RuntimeException(exception); + } + } + + + // // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + // + // + // class JSONException extends RuntimeException { + // +// public JSONException(String message) { +// super(message); +// } + // +// public JSONException(Throwable throwable) { +// super(throwable); +// } + // } + + + // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + // /** + // * Get the hex value of a character (base16). + // * @param c A character between '0' and '9' or between 'A' and 'F' or + // * between 'a' and 'f'. + // * @return An int between 0 and 15, or -1 if c was not a hex digit. + // */ + // static protected int dehexchar(char c) { +// if (c >= '0' && c <= '9') { +// return c - '0'; +// } +// if (c >= 'A' && c <= 'F') { +// return c - ('A' - 10); +// } +// if (c >= 'a' && c <= 'f') { +// return c - ('a' - 10); +// } +// return -1; + // } + + + // static class JSONTokener { +// private long character; +// private boolean eof; +// private long index; +// private long line; +// private char previous; +// private Reader reader; +// private boolean usePrevious; + // + // +// /** +// * Construct a JSONTokener from a Reader. +// * +// * @param reader A reader. +// */ +// public JSONTokener(Reader reader) { +// this.reader = reader.markSupported() +// ? reader +// : new BufferedReader(reader); +// this.eof = false; +// this.usePrevious = false; +// this.previous = 0; +// this.index = 0; +// this.character = 1; +// this.line = 1; +// } + // + // +// /** +// * Construct a JSONTokener from an InputStream. +// */ +// public JSONTokener(InputStream inputStream) { +// this(new InputStreamReader(inputStream)); +// } + // + // +// /** +// * Construct a JSONTokener from a string. +// * +// * @param s A source string. +// */ +// public JSONTokener(String s) { +// this(new StringReader(s)); +// } + // + // +// /** +// * Back up one character. This provides a sort of lookahead capability, +// * so that you can test for a digit or letter before attempting to parse +// * the next number or identifier. +// */ +// public void back() { +// if (this.usePrevious || this.index <= 0) { +// throw new RuntimeException("Stepping back two steps is not supported"); +// } +// this.index -= 1; +// this.character -= 1; +// this.usePrevious = true; +// this.eof = false; +// } + // + // +// public boolean end() { +// return this.eof && !this.usePrevious; +// } + // + // +// /** +// * Determine if the source string still contains characters that next() +// * can consume. +// * @return true if not yet at the end of the source. +// */ +// public boolean more() { +// this.next(); +// if (this.end()) { +// return false; +// } +// this.back(); +// return true; +// } + // + // +// /** +// * Get the next character in the source string. +// * +// * @return The next character, or 0 if past the end of the source string. +// */ +// public char next() { +// int c; +// if (this.usePrevious) { +// this.usePrevious = false; +// c = this.previous; +// } else { +// try { +// c = this.reader.read(); +// } catch (IOException exception) { +// throw new RuntimeException(exception); +// } + // +// if (c <= 0) { // End of stream +// this.eof = true; +// c = 0; +// } +// } +// this.index += 1; +// if (this.previous == '\r') { +// this.line += 1; +// this.character = c == '\n' ? 0 : 1; +// } else if (c == '\n') { +// this.line += 1; +// this.character = 0; +// } else { +// this.character += 1; +// } +// this.previous = (char) c; +// return this.previous; +// } + // + // +// /** +// * Consume the next character, and check that it matches a specified +// * character. +// * @param c The character to match. +// * @return The character. +// * @throws JSONException if the character does not match. +// */ +// public char next(char c) { +// char n = this.next(); +// if (n != c) { +// throw new RuntimeException("Expected '" + c + "' and instead saw '" + n + "'"); +// } +// return n; +// } + // + // +// /** +// * Get the next n characters. +// * +// * @param n The number of characters to take. +// * @return A string of n characters. +// * @throws JSONException +// * Substring bounds error if there are not +// * n characters remaining in the source string. +// */ +// public String next(int n) { +// if (n == 0) { +// return ""; +// } + // +// char[] chars = new char[n]; +// int pos = 0; + // +// while (pos < n) { +// chars[pos] = this.next(); +// if (this.end()) { +// throw new RuntimeException("Substring bounds error"); +// } +// pos += 1; +// } +// return new String(chars); +// } + // + // +// /** +// * Get the next char in the string, skipping whitespace. +// * @throws JSONException +// * @return A character, or 0 if there are no more characters. +// */ +// public char nextClean() { +// for (;;) { +// char c = this.next(); +// if (c == 0 || c > ' ') { +// return c; +// } +// } +// } + // + // +// /** +// * Return the characters up to the next close quote character. +// * Backslash processing is done. The formal JSON format does not +// * allow strings in single quotes, but an implementation is allowed to +// * accept them. +// * @param quote The quoting character, either +// * " (double quote) or +// * ' (single quote). +// * @return A String. +// * @throws JSONException Unterminated string. +// */ +// public String nextString(char quote) { +// char c; +// StringBuffer sb = new StringBuffer(); +// for (;;) { +// c = this.next(); +// switch (c) { +// case 0: +// case '\n': +// case '\r': +// throw new RuntimeException("Unterminated string"); +// case '\\': +// c = this.next(); +// switch (c) { +// case 'b': +// sb.append('\b'); +// break; +// case 't': +// sb.append('\t'); +// break; +// case 'n': +// sb.append('\n'); +// break; +// case 'f': +// sb.append('\f'); +// break; +// case 'r': +// sb.append('\r'); +// break; +// case 'u': +// sb.append((char)Integer.parseInt(this.next(4), 16)); +// break; +// case '"': +// case '\'': +// case '\\': +// case '/': +// sb.append(c); +// break; +// default: +// throw new RuntimeException("Illegal escape."); +// } +// break; +// default: +// if (c == quote) { +// return sb.toString(); +// } +// sb.append(c); +// } +// } +// } + // + // +// /** +// * Get the text up but not including the specified character or the +// * end of line, whichever comes first. +// * @param delimiter A delimiter character. +// * @return A string. +// */ +// public String nextTo(char delimiter) { +// StringBuffer sb = new StringBuffer(); +// for (;;) { +// char c = this.next(); +// if (c == delimiter || c == 0 || c == '\n' || c == '\r') { +// if (c != 0) { +// this.back(); +// } +// return sb.toString().trim(); +// } +// sb.append(c); +// } +// } + // + // +// /** +// * Get the text up but not including one of the specified delimiter +// * characters or the end of line, whichever comes first. +// * @param delimiters A set of delimiter characters. +// * @return A string, trimmed. +// */ +// public String nextTo(String delimiters) { +// char c; +// StringBuffer sb = new StringBuffer(); +// for (;;) { +// c = this.next(); +// if (delimiters.indexOf(c) >= 0 || c == 0 || +// c == '\n' || c == '\r') { +// if (c != 0) { +// this.back(); +// } +// return sb.toString().trim(); +// } +// sb.append(c); +// } +// } + // + // +// /** +// * Get the next value. The value can be a Boolean, Double, Integer, +// * JSONArray, JSONObject, Long, or String, or the JSONObject.NULL object. +// * @throws JSONException If syntax error. +// * +// * @return An object. +// */ +// public Object nextValue() { +// char c = this.nextClean(); +// String string; + // +// switch (c) { +// case '"': +// case '\'': +// return this.nextString(c); +// case '{': +// this.back(); +// return new JSONObject(this); +// case '[': +// this.back(); +// return new JSONArray(this); +// } + // +// /* +// * Handle unquoted text. This could be the values true, false, or +// * null, or it can be a number. An implementation (such as this one) +// * is allowed to also accept non-standard forms. +// * +// * Accumulate characters until we reach the end of the text or a +// * formatting character. +// */ + // +// StringBuffer sb = new StringBuffer(); +// while (c >= ' ' && ",:]}/\\\"[{;=#".indexOf(c) < 0) { +// sb.append(c); +// c = this.next(); +// } +// this.back(); + // +// string = sb.toString().trim(); +// if ("".equals(string)) { +// throw new RuntimeException("Missing value"); +// } +// return JSONObject.stringToValue(string); +// } + // + // +// /** +// * Skip characters until the next character is the requested character. +// * If the requested character is not found, no characters are skipped. +// * @param to A character to skip to. +// * @return The requested character, or zero if the requested character +// * is not found. +// */ +// public char skipTo(char to) { +// char c; +// try { +// long startIndex = this.index; +// long startCharacter = this.character; +// long startLine = this.line; +// this.reader.mark(1000000); +// do { +// c = this.next(); +// if (c == 0) { +// this.reader.reset(); +// this.index = startIndex; +// this.character = startCharacter; +// this.line = startLine; +// return c; +// } +// } while (c != to); +// } catch (IOException exc) { +// throw new RuntimeException(exc); +// } + // +// this.back(); +// return c; +// } + // + // +// /** +// * Make a printable string of this JSONTokener. +// * +// * @return " at {index} [character {character} line {line}]" +// */ +// @Override +// public String toString() { +// return " at " + this.index + " [character " + this.character + " line " + +// this.line + "]"; +// } + // } + } + + /* + Copyright (c) 2002 JSON.org + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + The Software shall be used for Good, not Evil. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + */ + + /** + * A JSONArray is an ordered sequence of values. Its external text form is a + * string wrapped in square brackets with commas separating the values. The + * internal form is an object having get and opt + * methods for accessing the values by index, and put methods for + * adding or replacing values. The values can be any of these types: + * Boolean, JSONArray, JSONObject, + * Number, String, or the + * JSONObject.NULL object. + *

+ * The constructor can convert a JSON text into a Java object. The + * toString method converts to JSON text. + *

+ * A get method returns a value if one can be found, and throws an + * exception if one cannot be found. An opt method returns a + * default value instead of throwing an exception, and so is useful for + * obtaining optional values. + *

+ * The generic get() and opt() methods return an + * object which you can cast or query for type. There are also typed + * get and opt methods that do type checking and type + * coercion for you. + *

+ * The texts produced by the toString methods strictly conform to + * JSON syntax rules. The constructors are more forgiving in the texts they will + * accept: + *

    + *
  • An extra , (comma) may appear just + * before the closing bracket.
  • + *
  • The null value will be inserted when there is , + *  (comma) elision.
  • + *
  • Strings may be quoted with ' (single + * quote).
  • + *
  • Strings do not need to be quoted at all if they do not begin with a quote + * or single quote, and if they do not contain leading or trailing spaces, and + * if they do not contain any of these characters: + * { } [ ] / \ : , = ; # and if they do not look like numbers and + * if they are not the reserved words true, false, or + * null.
  • + *
  • Values can be separated by ; (semicolon) as + * well as by , (comma).
  • + *
+ * + * @author JSON.org + * @version 2012-11-13 + */ + static class JSONArray extends JSON { + + + /** + * The arrayList where the JSONArray's properties are kept. + */ + private final ArrayList myArrayList; + + + /** + * Construct an empty JSONArray. + */ + public JSONArray() { + super(); + this.myArrayList = new ArrayList(); + } + + /** + * Construct a JSONArray from a JSONTokener. + * @param x A JSONTokener + * @throws JSONException If there is a syntax error. + */ + /*private*/protected JSONArray(JSONTokener x) { + this(); + if (x.nextClean() != '[') { + throw new RuntimeException("A JSONArray text must start with '['"); + } + if (x.nextClean() != ']') { + x.back(); + for (;;) { + if (x.nextClean() == ',') { + x.back(); + myArrayList.add(JSON/*Object*/.NULL); + } else { + x.back(); + myArrayList.add(x.nextValue()); + } + switch (x.nextClean()) { + case ';': + case ',': + if (x.nextClean() == ']') { + return; + } + x.back(); + break; + case ']': + return; + default: + throw new RuntimeException("Expected a ',' or ']'"); + } + } + } + } + + + /** + * Construct a JSONArray from a source JSON text. + * @param source A string that begins with + * [ (left bracket) + * and ends with ] (right bracket). + * @throws JSONException If there is a syntax error. + */ + static public JSONArray parse(String source) { + try { + return new JSONArray(new JSONTokener(source)); + } catch (Exception e) { + return null; + } + } + + + // /** + // * Construct a JSONArray from a Collection. + // * @param collection A Collection. + // */ + // public JSONArray(Collection collection) { +// myArrayList = new ArrayList(); +// if (collection != null) { +// Iterator iter = collection.iterator(); +// while (iter.hasNext()) { +// myArrayList.add(JSONObject.wrap(iter.next())); +// } +// } + // } + + + // TODO not decided whether we keep this one, but used heavily by JSONObject + /** + * Construct a JSONArray from an array + * @throws JSONException If not an array. + */ + protected JSONArray(Object array) { + this(); + if (array.getClass().isArray()) { + int length = Array.getLength(array); + for (int i = 0; i < length; i += 1) { + this.append(JSONObject.wrap(Array.get(array, i))); + } + } else { + throw new RuntimeException("JSONArray initial value should be a string or collection or array."); + } + } + + + /** + * Get the optional object value associated with an index. + * @param index The index must be between 0 and length() - 1. + * @return An object value, or null if there is no + * object at that index. + */ + private Object opt(int index) { + if (index < 0 || index >= this.size()) { + return null; + } + return myArrayList.get(index); + } + + + /** + * Get the object value associated with an index. + * @param index The index must be between 0 and length() - 1. + * @return An object value. + * @throws JSONException If there is no value for the index. + */ + private Object get(int index) { + Object object = opt(index); + if (object == null) { + throw new RuntimeException("JSONArray[" + index + "] not found."); + } + return object; + } + + + /** + * Get the string associated with an index. + * @param index The index must be between 0 and length() - 1. + * @return A string value. + * @throws JSONException If there is no string value for the index. + */ + public String getInnerString(int index) { + Object object = this.get(index); + if (object instanceof String) { + return (String)object; + } + throw new RuntimeException("JSONArray[" + index + "] not a string."); + } + + + /** + * Get the int value associated with an index. + * + * @param index The index must be between 0 and length() - 1. + * @return The value. + * @throws JSONException If the key is not found or if the value is not a number. + */ + public int getInnerInt(int index) { + Object object = this.get(index); + try { + return object instanceof Number + ? ((Number)object).intValue() + : Integer.parseInt((String)object); + } catch (Exception e) { + throw new RuntimeException("JSONArray[" + index + "] is not a number."); + } + } + + + /** + * Get the long value associated with an index. + * + * @param index The index must be between 0 and length() - 1. + * @return The value. + * @throws JSONException If the key is not found or if the value cannot + * be converted to a number. + */ + public long getInnerLong(int index) { + Object object = this.get(index); + try { + return object instanceof Number + ? ((Number)object).longValue() + : Long.parseLong((String)object); + } catch (Exception e) { + throw new RuntimeException("JSONArray[" + index + "] is not a number."); + } + } + + + /** + * Get a value from an index as a float. JSON uses 'double' values + * internally, so this is simply getDouble() cast to a float. + */ + public float getInnerFloat(int index) { + return (float) getInnerDouble(index); + } + + + /** + * Get the double value associated with an index. + * + * @param index The index must be between 0 and length() - 1. + * @return The value. + * @throws JSONException If the key is not found or if the value cannot + * be converted to a number. + */ + public double getInnerDouble(int index) { + Object object = this.get(index); + try { + return object instanceof Number + ? ((Number)object).doubleValue() + : Double.parseDouble((String)object); + } catch (Exception e) { + throw new RuntimeException("JSONArray[" + index + "] is not a number."); + } + } + + + /** + * Get the boolean value associated with an index. + * The string values "true" and "false" are converted to boolean. + * + * @param index The index must be between 0 and length() - 1. + * @return The truth. + * @throws JSONException If there is no value for the index or if the + * value is not convertible to boolean. + */ + public boolean getInnerBoolean(int index) { + Object object = this.get(index); + if (object.equals(Boolean.FALSE) || + (object instanceof String && + ((String)object).equalsIgnoreCase("false"))) { + return false; + } else if (object.equals(Boolean.TRUE) || + (object instanceof String && + ((String)object).equalsIgnoreCase("true"))) { + return true; + } + throw new RuntimeException("JSONArray[" + index + "] is not a boolean."); + } + + + /** + * Get the JSONArray associated with an index. + * @param index The index must be between 0 and length() - 1. + * @return A JSONArray value. + * @throws JSONException If there is no value for the index. or if the + * value is not a JSONArray + */ + public JSONArray getInnerArray(int index) { + Object object = this.get(index); + if (object instanceof JSONArray) { + return (JSONArray)object; + } + throw new RuntimeException("JSONArray[" + index + "] is not a JSONArray."); + } + + + /** + * Get the JSONObject associated with an index. + * @param index subscript + * @return A JSONObject value. + * @throws JSONException If there is no value for the index or if the + * value is not a JSONObject + */ + public JSONObject getInnerObject(int index) { + Object object = this.get(index); + if (object instanceof JSONObject) { + return (JSONObject)object; + } + throw new RuntimeException("JSONArray[" + index + "] is not a JSONObject."); + } + + + // /** + // * Get the optional boolean value associated with an index. + // * It returns false if there is no value at that index, + // * or if the value is not Boolean.TRUE or the String "true". + // * + // * @param index The index must be between 0 and length() - 1. + // * @return The truth. + // */ + // public boolean optBoolean(int index) { +// return this.optBoolean(index, false); + // } + // + // + // /** + // * Get the optional boolean value associated with an index. + // * It returns the defaultValue if there is no value at that index or if + // * it is not a Boolean or the String "true" or "false" (case insensitive). + // * + // * @param index The index must be between 0 and length() - 1. + // * @param defaultValue A boolean default. + // * @return The truth. + // */ + // public boolean optBoolean(int index, boolean defaultValue) { +// try { +// return this.getBoolean(index); +// } catch (Exception e) { +// return defaultValue; +// } + // } + // + // + // /** + // * Get the optional double value associated with an index. + // * NaN is returned if there is no value for the index, + // * or if the value is not a number and cannot be converted to a number. + // * + // * @param index The index must be between 0 and length() - 1. + // * @return The value. + // */ + // public double optDouble(int index) { +// return this.optDouble(index, Double.NaN); + // } + // + // + // /** + // * Get the optional double value associated with an index. + // * The defaultValue is returned if there is no value for the index, + // * or if the value is not a number and cannot be converted to a number. + // * + // * @param index subscript + // * @param defaultValue The default value. + // * @return The value. + // */ + // public double optDouble(int index, double defaultValue) { +// try { +// return this.getDouble(index); +// } catch (Exception e) { +// return defaultValue; +// } + // } + // + // + // /** + // * Get the optional int value associated with an index. + // * Zero is returned if there is no value for the index, + // * or if the value is not a number and cannot be converted to a number. + // * + // * @param index The index must be between 0 and length() - 1. + // * @return The value. + // */ + // public int optInt(int index) { +// return this.optInt(index, 0); + // } + // + // + // /** + // * Get the optional int value associated with an index. + // * The defaultValue is returned if there is no value for the index, + // * or if the value is not a number and cannot be converted to a number. + // * @param index The index must be between 0 and length() - 1. + // * @param defaultValue The default value. + // * @return The value. + // */ + // public int optInt(int index, int defaultValue) { +// try { +// return this.getInt(index); +// } catch (Exception e) { +// return defaultValue; +// } + // } + // + // + // /** + // * Get the optional JSONArray associated with an index. + // * @param index subscript + // * @return A JSONArray value, or null if the index has no value, + // * or if the value is not a JSONArray. + // */ + // public JSONArray optJSONArray(int index) { +// Object o = this.opt(index); +// return o instanceof JSONArray ? (JSONArray)o : null; + // } + // + // + // /** + // * Get the optional JSONObject associated with an index. + // * Null is returned if the key is not found, or null if the index has + // * no value, or if the value is not a JSONObject. + // * + // * @param index The index must be between 0 and length() - 1. + // * @return A JSONObject value. + // */ + // public JSON optJSONObject(int index) { +// Object o = this.opt(index); +// return o instanceof JSON ? (JSON)o : null; + // } + // + // + // /** + // * Get the optional long value associated with an index. + // * Zero is returned if there is no value for the index, + // * or if the value is not a number and cannot be converted to a number. + // * + // * @param index The index must be between 0 and length() - 1. + // * @return The value. + // */ + // public long optLong(int index) { +// return this.optLong(index, 0); + // } + // + // + // /** + // * Get the optional long value associated with an index. + // * The defaultValue is returned if there is no value for the index, + // * or if the value is not a number and cannot be converted to a number. + // * @param index The index must be between 0 and length() - 1. + // * @param defaultValue The default value. + // * @return The value. + // */ + // public long optLong(int index, long defaultValue) { +// try { +// return this.getLong(index); +// } catch (Exception e) { +// return defaultValue; +// } + // } + // + // + // /** + // * Get the optional string value associated with an index. It returns an + // * empty string if there is no value at that index. If the value + // * is not a string and is not null, then it is coverted to a string. + // * + // * @param index The index must be between 0 and length() - 1. + // * @return A String value. + // */ + // public String optString(int index) { +// return this.optString(index, ""); + // } + // + // + // /** + // * Get the optional string associated with an index. + // * The defaultValue is returned if the key is not found. + // * + // * @param index The index must be between 0 and length() - 1. + // * @param defaultValue The default value. + // * @return A String value. + // */ + // public String optString(int index, String defaultValue) { +// Object object = this.opt(index); +// return JSON.NULL.equals(object) +// ? defaultValue +// : object.toString(); + // } + + + /** + * Append an int value. This increases the array's length by one. + * + * @param value An int value. + * @return this. + */ + public JSONArray append(int value) { + this.append(new Integer(value)); + return this; + } + + + /** + * Append an long value. This increases the array's length by one. + * + * @param value A long value. + * @return this. + */ + public JSONArray append(long value) { + this.append(new Long(value)); + return this; + } + + + /** + * Append a float value. This increases the array's length by one. + * This will store the value as a double, since there are no floats in JSON. + * + * @param value A float value. + * @throws JSONException if the value is not finite. + * @return this. + */ + public JSONArray append(float value) { + return append((double) value); + } + + + /** + * Append a double value. This increases the array's length by one. + * + * @param value A double value. + * @throws JSONException if the value is not finite. + * @return this. + */ + public JSONArray append(double value) { + Double d = new Double(value); + JSONObject.testValidity(d); + this.append(d); + return this; + } + + + /** + * Append a boolean value. This increases the array's length by one. + * + * @param value A boolean value. + * @return this. + */ + public JSONArray append(boolean value) { + this.append(value ? Boolean.TRUE : Boolean.FALSE); + return this; + } + + /** + * Append a boolean value. This increases the array's length by one. + * + * @param value A boolean value. + * @return this. + */ + public JSONArray append(String value) { + this.append(new String(value)); + return this; + } + + // /** + // * Put a value in the JSONArray, where the value will be a + // * JSONArray which is produced from a Collection. + // * @param value A Collection value. + // * @return this. + // */ + // public JSONArray append(Collection value) { +// this.append(new JSONArray(value)); +// return this; + // } + + + // /** + // * Put a value in the JSONArray, where the value will be a + // * JSONObject which is produced from a Map. + // * @param value A Map value. + // * @return this. + // */ + // public JSONArray append(Map value) { +// this.append(new JSONObject(value)); +// return this; + // } + + + public JSONArray append(JSONArray value) { + myArrayList.add(value); + return this; + } + + + public JSONArray append(JSONObject value) { + myArrayList.add(value); + return this; + } + + + /** + * Append an object value. This increases the array's length by one. + * @param value An object value. The value should be a + * Boolean, Double, Integer, JSONArray, JSONObject, Long, or String, or the + * JSONObject.NULL object. + * @return this. + */ + protected JSONArray append(Object value) { + myArrayList.add(value); + return this; + } + + + // /** + // * Put a value in the JSONArray, where the value will be a + // * JSONArray which is produced from a Collection. + // * @param index The subscript. + // * @param value A Collection value. + // * @return this. + // * @throws JSONException If the index is negative or if the value is + // * not finite. + // */ + // public JSONArray set(int index, Collection value) { +// this.set(index, new JSONArray(value)); +// return this; + // } + + + /** + * Put or replace an int value. If the index is greater than the length of + * the JSONArray, then null elements will be added as necessary to pad + * it out. + * @param index The subscript. + * @param value An int value. + * @return this. + * @throws JSONException If the index is negative. + */ + public JSONArray setInt(int index, int value) { + this.set(index, new Integer(value)); + return this; + } + + + /** + * Put or replace a long value. If the index is greater than the length of + * the JSONArray, then null elements will be added as necessary to pad + * it out. + * @param index The subscript. + * @param value A long value. + * @return this. + * @throws JSONException If the index is negative. + */ + public JSONArray setLong(int index, long value) { + return set(index, new Long(value)); + } + + + /** + * Put or replace a float value. If the index is greater than the length + * of the JSONArray, then null elements will be added as necessary to pad + * it out. There are no 'double' values in JSON, so this is passed to + * setDouble(value). + * @param index The subscript. + * @param value A float value. + * @return this. + * @throws RuntimeException If the index is negative or if the value is + * not finite. + */ + public JSONArray setFloat(int index, float value) { + return setDouble(index, value); + } + + + /** + * Put or replace a double value. If the index is greater than the length of + * the JSONArray, then null elements will be added as necessary to pad + * it out. + * @param index The subscript. + * @param value A double value. + * @return this. + * @throws JSONException If the index is negative or if the value is + * not finite. + */ + public JSONArray setDouble(int index, double value) { + return set(index, new Double(value)); + } + + + /** + * Put or replace a boolean value in the JSONArray. If the index is greater + * than the length of the JSONArray, then null elements will be added as + * necessary to pad it out. + * @param index The subscript. + * @param value A boolean value. + * @return this. + * @throws JSONException If the index is negative. + */ + public JSONArray setBoolean(int index, boolean value) { + return set(index, value ? Boolean.TRUE : Boolean.FALSE); + } + + /** + * Put or replace a String value in the JSONArray. If the index is greater + * than the length of the JSONArray, then null elements will be added as + * necessary to pad it out. + * @param index The subscript. + * @param value A String value. + * @return this. + * @throws JSONException If the index is negative. + */ + public JSONArray setBoolean(int index, String value) { + return set(index, new String(value)); + } + + // /** + // * Put a value in the JSONArray, where the value will be a + // * JSONObject that is produced from a Map. + // * @param index The subscript. + // * @param value The Map value. + // * @return this. + // * @throws JSONException If the index is negative or if the the value is + // * an invalid number. + // */ + // public JSONArray set(int index, Map value) { +// this.set(index, new JSONObject(value)); +// return this; + // } + + + public JSONArray setArray(int index, JSONArray value) { + set(index, value); + return this; + } + + + public JSONArray setObject(int index, JSONObject value) { + set(index, value); + return this; + } + + + /** + * Put or replace an object value in the JSONArray. If the index is greater + * than the length of the JSONArray, then null elements will be added as + * necessary to pad it out. + * @param index The subscript. + * @param value The value to put into the array. The value should be a + * Boolean, Double, Integer, JSONArray, JSONObject, Long, or String, or the + * JSONObject.NULL object. + * @return this. + * @throws JSONException If the index is negative or if the the value is + * an invalid number. + */ + private JSONArray set(int index, Object value) { + JSONObject.testValidity(value); + if (index < 0) { + throw new RuntimeException("JSONArray[" + index + "] not found."); + } + if (index < this.size()) { + this.myArrayList.set(index, value); + } else { + while (index != this.size()) { + this.append(JSON/*Object*/.NULL); + } + this.append(value); + } + return this; + } + + + /** + * Get the number of elements in the JSONArray, included nulls. + * + * @return The length (or size). + */ + public int size() { + return myArrayList.size(); + } + + + /** + * Determine if the value is null. + * @param index The index must be between 0 and length() - 1. + * @return true if the value at the index is null, or if there is no value. + */ + // TODO not sure on this one + protected boolean isNull(int index) { + return JSON/*Object*/.NULL.equals(this.opt(index)); + } + + + /** + * Remove an index and close the hole. + * @param index The index of the element to be removed. + * @return The value that was associated with the index, + * or null if there was no value. + */ + public Object removeIndex(int index) { + Object o = this.opt(index); + this.myArrayList.remove(index); + return o; + } + + + // /** + // * Produce a JSONObject by combining a JSONArray of names with the values + // * of this JSONArray. + // * @param names A JSONArray containing a list of key strings. These will be + // * paired with the values. + // * @return A JSONObject, or null if there are no names or if this JSONArray + // * has no values. + // * @throws JSONException If any of the names are null. + // */ + // public JSON toJSONObject(JSONArray names) { +// if (names == null || names.length() == 0 || this.length() == 0) { +// return null; +// } +// JSON jo = new JSON(); +// for (int i = 0; i < names.length(); i += 1) { +// jo.put(names.getString(i), this.opt(i)); +// } +// return jo; + // } + + + + /** + * Return the JSON data formatted with two spaces for indents. + * Chosen to do this since it's the most common case (e.g. with println()). + * Same as format(2). Use the format() function for more options. + */ + @Override + public String toString() { + try { + return format(2); + } catch (Exception e) { + return null; + } + } + + + /** + * Make a pretty-printed JSON text of this JSONArray. + * Warning: This method assumes that the data structure is acyclical. + * @param indentFactor The number of spaces to add to each level of + * indentation. Use -1 to specify no indentation and no newlines. + * @return a printable, displayable, transmittable + * representation of the object, beginning + * with [ (left bracket) and ending + * with ] (right bracket). + */ + public String format(int indentFactor) { + StringWriter sw = new StringWriter(); + synchronized (sw.getBuffer()) { + return this.write(sw, indentFactor, 0).toString(); + } + } + + /** + * Write the contents of the JSONArray as JSON text to a writer. For + * compactness, no whitespace is added. + *

+ * Warning: This method assumes that the data structure is acyclic. + * + * @return The writer. + */ + protected Writer write(Writer writer) { + return this.write(writer, -1, 0); + } + + /** + * Write the contents of the JSONArray as JSON text to a writer. For + * compactness, no whitespace is added. + *

+ * Warning: This method assumes that the data structure is acyclic. + * + * @param indentFactor + * The number of spaces to add to each level of indentation. + * Use -1 to specify no indentation and no newlines. + * @param indent + * The indention of the top level. + * @return The writer. + * @throws JSONException + */ + protected Writer write(Writer writer, int indentFactor, int indent) { + try { + boolean commanate = false; + int length = this.size(); + writer.write('['); + + // Use -1 to signify 'no indent' + int thisFactor = (indentFactor == -1) ? 0 : indentFactor; + + if (length == 1) { + JSONObject.writeValue(writer, this.myArrayList.get(0), + thisFactor, indent); + } else if (length != 0) { + final int newindent = indent + thisFactor; + + for (int i = 0; i < length; i += 1) { + if (commanate) { + writer.write(','); + } + if (indentFactor != -1) { + writer.write('\n'); + } + JSONObject.indent(writer, newindent); + JSONObject.writeValue(writer, this.myArrayList.get(i), + thisFactor, newindent); + commanate = true; + } + if (indentFactor != -1) { + writer.write('\n'); + } + JSONObject.indent(writer, indent); + } + writer.write(']'); + return writer; + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + + /** + * Make a string from the contents of this JSONArray. The + * separator string is inserted between each element. + * Warning: This method assumes that the data structure is acyclic. + * @param separator A string that will be inserted between the elements. + * @return a string. + * @throws JSONException If the array contains an invalid number. + */ + public String join(String separator) { + int len = this.size(); + StringBuffer sb = new StringBuffer(); + + for (int i = 0; i < len; i += 1) { + if (i > 0) { + sb.append(separator); + } + sb.append(JSONObject.valueToString(this.myArrayList.get(i))); + } + return sb.toString(); + } + } + +} diff --git a/src/org/json/JSONArray.java b/src/org/json/JSONArr.java similarity index 87% rename from src/org/json/JSONArray.java rename to src/org/json/JSONArr.java index a65c3d7d0..bafdfe75a 100644 --- a/src/org/json/JSONArray.java +++ b/src/org/json/JSONArr.java @@ -1,944 +1,944 @@ -package org.json; - -/* -Copyright (c) 2002 JSON.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -The Software shall be used for Good, not Evil. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -import java.io.IOException; -import java.io.Writer; -import java.lang.reflect.Array; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; -import java.util.Map; - -/** - * A JSONArray is an ordered sequence of values. Its external text form is a - * string wrapped in square brackets with commas separating the values. The - * internal form is an object having get and opt - * methods for accessing the values by index, and put methods for - * adding or replacing values. The values can be any of these types: - * Boolean, JSONArray, JSONObject, - * Number, String, or the - * JSONObject.NULL object. - *

- * The constructor can convert a JSON text into a Java object. The - * toString method converts to JSON text. - *

- * A get method returns a value if one can be found, and throws an - * exception if one cannot be found. An opt method returns a - * default value instead of throwing an exception, and so is useful for - * obtaining optional values. - *

- * The generic get() and opt() methods return an - * object which you can cast or query for type. There are also typed - * get and opt methods that do type checking and type - * coercion for you. - *

- * The texts produced by the toString methods strictly conform to - * JSON syntax rules. The constructors are more forgiving in the texts they will - * accept: - *

    - *
  • An extra , (comma) may appear just - * before the closing bracket.
  • - *
  • The null value will be inserted when there - * is , (comma) elision.
  • - *
  • Strings may be quoted with ' (single - * quote).
  • - *
  • Strings do not need to be quoted at all if they do not begin with a quote - * or single quote, and if they do not contain leading or trailing spaces, - * and if they do not contain any of these characters: - * { } [ ] / \ : , = ; # and if they do not look like numbers - * and if they are not the reserved words true, - * false, or null.
  • - *
  • Values can be separated by ; (semicolon) as - * well as by , (comma).
  • - *
  • Numbers may have the - * 0x- (hex) prefix.
  • - *
- - * @author JSON.org - * @version 2011-08-25 - */ -public class JSONArray { - - - /** - * The arrayList where the JSONArray's properties are kept. - */ - private ArrayList myArrayList; - - - /** - * Construct an empty JSONArray. - */ - public JSONArray() { - this.myArrayList = new ArrayList(); - } - - /** - * Construct a JSONArray from a JSONTokener. - * @param x A JSONTokener - * @throws JSONException If there is a syntax error. - */ - public JSONArray(JSONTokener x) throws JSONException { - this(); - if (x.nextClean() != '[') { - throw x.syntaxError("A JSONArray text must start with '['"); - } - if (x.nextClean() != ']') { - x.back(); - for (;;) { - if (x.nextClean() == ',') { - x.back(); - this.myArrayList.add(JSONObject.NULL); - } else { - x.back(); - this.myArrayList.add(x.nextValue()); - } - switch (x.nextClean()) { - case ';': - case ',': - if (x.nextClean() == ']') { - return; - } - x.back(); - break; - case ']': - return; - default: - throw x.syntaxError("Expected a ',' or ']'"); - } - } - } - } - - - /** - * Construct a JSONArray from a source JSON text. - * @param source A string that begins with - * [ (left bracket) - * and ends with ] (right bracket). - * @throws JSONException If there is a syntax error. - */ - public JSONArray(String source) throws JSONException { - this(new JSONTokener(source)); - } - - - /** - * Construct a JSONArray from a Collection. - * @param collection A Collection. - */ - public JSONArray(Collection collection) { - this.myArrayList = new ArrayList(); - if (collection != null) { - Iterator iter = collection.iterator(); - while (iter.hasNext()) { - this.myArrayList.add(JSONObject.wrap(iter.next())); - } - } - } - - - /** - * Construct a JSONArray from an array - * @throws JSONException If not an array. - */ - public JSONArray(Object array) /*throws JSONException*/ { - this(); - if (array.getClass().isArray()) { - int length = Array.getLength(array); - for (int i = 0; i < length; i += 1) { - this.put(JSONObject.wrap(Array.get(array, i))); - } - } else { -// throw new JSONException( -//"JSONArray initial value should be a string or collection or array."); - System.out.println("JSONArray initial value should be a string or collection or array."); - } - } - - - /** - * Get the object value associated with an index. - * @param index - * The index must be between 0 and length() - 1. - * @return An object value. - * @throws JSONException If there is no value for the index. - */ - public Object get(int index) /*throws JSONException*/ { - Object object = opt(index); - if (object == null) { - //throw new JSONException("JSONArray[" + index + "] not found."); - System.out.println("JSONArray[" + index + "] not found."); - } - return object; - } - - - /** - * Get the boolean value associated with an index. - * The string values "true" and "false" are converted to boolean. - * - * @param index The index must be between 0 and length() - 1. - * @return The truth. - * @throws JSONException If there is no value for the index or if the - * value is not convertible to boolean. - */ - public boolean getBoolean(int index) throws JSONException { - Object object = get(index); - if (object.equals(Boolean.FALSE) || - (object instanceof String && - ((String)object).equalsIgnoreCase("false"))) { - return false; - } else if (object.equals(Boolean.TRUE) || - (object instanceof String && - ((String)object).equalsIgnoreCase("true"))) { - return true; - } - throw new JSONException("JSONArray[" + index + "] is not a boolean."); - } - - - /** - * Get the double value associated with an index. - * - * @param index The index must be between 0 and length() - 1. - * @return The value. - * @throws JSONException If the key is not found or if the value cannot - * be converted to a number. - */ - public double getDouble(int index) throws JSONException { - Object object = get(index); - try { - return object instanceof Number ? - ((Number)object).doubleValue() : - Double.parseDouble((String)object); - } catch (Exception e) { - throw new JSONException("JSONArray[" + index + - "] is not a number."); - } - } - - - /** - * Get the int value associated with an index. - * - * @param index The index must be between 0 and length() - 1. - * @return The value. - * @throws JSONException If the key is not found or if the value is not a number. - */ - public int getInt(int index) throws JSONException { - Object object = get(index); - try { - return object instanceof Number ? - ((Number)object).intValue() : - Integer.parseInt((String)object); - } catch (Exception e) { - throw new JSONException("JSONArray[" + index + - "] is not a number."); - } - } - - - /** - * Get the JSONArray associated with an index. - * @param index The index must be between 0 and length() - 1. - * @return A JSONArray value. - * @throws JSONException If there is no value for the index. or if the - * value is not a JSONArray - */ - public JSONArray getJSONArray(int index) throws JSONException { - Object object = get(index); - if (object instanceof JSONArray) { - return (JSONArray)object; - } - throw new JSONException("JSONArray[" + index + - "] is not a JSONArray."); - } - - - /** - * Get the JSONObject associated with an index. - * @param index subscript - * @return A JSONObject value. - * @throws JSONException If there is no value for the index or if the - * value is not a JSONObject - */ - public JSONObject getJSONObject(int index) /*throws JSONException*/ { - Object object = null; -// try { - object = get(index); -// } catch (JSONException e) { -// e.printStackTrace(); -// System.out.println( "JSONArray[" + index + "] is not a JSONObject." ); -// } - - if( object == null ) - return null; - - if (object instanceof JSONObject) { - return (JSONObject)object; - } -// throw new JSONException("JSONArray[" + index + -// "] is not a JSONObject."); - return null; - } - - - /** - * Get the long value associated with an index. - * - * @param index The index must be between 0 and length() - 1. - * @return The value. - * @throws JSONException If the key is not found or if the value cannot - * be converted to a number. - */ - public long getLong(int index) throws JSONException { - Object object = get(index); - try { - return object instanceof Number ? - ((Number)object).longValue() : - Long.parseLong((String)object); - } catch (Exception e) { - throw new JSONException("JSONArray[" + index + - "] is not a number."); - } - } - - - /** - * Get the string associated with an index. - * @param index The index must be between 0 and length() - 1. - * @return A string value. - * @throws JSONException If there is no string value for the index. - */ - public String getString(int index) throws JSONException { - Object object = get(index); - if (object instanceof String) { - return (String)object; - } - throw new JSONException("JSONArray[" + index + "] not a string."); - } - - - /** - * Determine if the value is null. - * @param index The index must be between 0 and length() - 1. - * @return true if the value at the index is null, or if there is no value. - */ - public boolean isNull(int index) { - return JSONObject.NULL.equals(opt(index)); - } - - - /** - * Make a string from the contents of this JSONArray. The - * separator string is inserted between each element. - * Warning: This method assumes that the data structure is acyclical. - * @param separator A string that will be inserted between the elements. - * @return a string. - * @throws JSONException If the array contains an invalid number. - */ - public String join(String separator) throws JSONException { - int len = length(); - StringBuffer sb = new StringBuffer(); - - for (int i = 0; i < len; i += 1) { - if (i > 0) { - sb.append(separator); - } - sb.append(JSONObject.valueToString(this.myArrayList.get(i))); - } - return sb.toString(); - } - - - /** - * Get the number of elements in the JSONArray, included nulls. - * - * @return The length (or size). - */ - public int length() { - return this.myArrayList.size(); - } - - - /** - * Get the optional object value associated with an index. - * @param index The index must be between 0 and length() - 1. - * @return An object value, or null if there is no - * object at that index. - */ - public Object opt(int index) { - return (index < 0 || index >= length()) ? - null : this.myArrayList.get(index); - } - - - /** - * Get the optional boolean value associated with an index. - * It returns false if there is no value at that index, - * or if the value is not Boolean.TRUE or the String "true". - * - * @param index The index must be between 0 and length() - 1. - * @return The truth. - */ - public boolean optBoolean(int index) { - return optBoolean(index, false); - } - - - /** - * Get the optional boolean value associated with an index. - * It returns the defaultValue if there is no value at that index or if - * it is not a Boolean or the String "true" or "false" (case insensitive). - * - * @param index The index must be between 0 and length() - 1. - * @param defaultValue A boolean default. - * @return The truth. - */ - public boolean optBoolean(int index, boolean defaultValue) { - try { - return getBoolean(index); - } catch (Exception e) { - return defaultValue; - } - } - - - /** - * Get the optional double value associated with an index. - * NaN is returned if there is no value for the index, - * or if the value is not a number and cannot be converted to a number. - * - * @param index The index must be between 0 and length() - 1. - * @return The value. - */ - public double optDouble(int index) { - return optDouble(index, Double.NaN); - } - - - /** - * Get the optional double value associated with an index. - * The defaultValue is returned if there is no value for the index, - * or if the value is not a number and cannot be converted to a number. - * - * @param index subscript - * @param defaultValue The default value. - * @return The value. - */ - public double optDouble(int index, double defaultValue) { - try { - return getDouble(index); - } catch (Exception e) { - return defaultValue; - } - } - - - /** - * Get the optional int value associated with an index. - * Zero is returned if there is no value for the index, - * or if the value is not a number and cannot be converted to a number. - * - * @param index The index must be between 0 and length() - 1. - * @return The value. - */ - public int optInt(int index) { - return optInt(index, 0); - } - - - /** - * Get the optional int value associated with an index. - * The defaultValue is returned if there is no value for the index, - * or if the value is not a number and cannot be converted to a number. - * @param index The index must be between 0 and length() - 1. - * @param defaultValue The default value. - * @return The value. - */ - public int optInt(int index, int defaultValue) { - try { - return getInt(index); - } catch (Exception e) { - return defaultValue; - } - } - - - /** - * Get the optional JSONArray associated with an index. - * @param index subscript - * @return A JSONArray value, or null if the index has no value, - * or if the value is not a JSONArray. - */ - public JSONArray optJSONArray(int index) { - Object o = opt(index); - return o instanceof JSONArray ? (JSONArray)o : null; - } - - - /** - * Get the optional JSONObject associated with an index. - * Null is returned if the key is not found, or null if the index has - * no value, or if the value is not a JSONObject. - * - * @param index The index must be between 0 and length() - 1. - * @return A JSONObject value. - */ - public JSONObject optJSONObject(int index) { - Object o = opt(index); - return o instanceof JSONObject ? (JSONObject)o : null; - } - - - /** - * Get the optional long value associated with an index. - * Zero is returned if there is no value for the index, - * or if the value is not a number and cannot be converted to a number. - * - * @param index The index must be between 0 and length() - 1. - * @return The value. - */ - public long optLong(int index) { - return optLong(index, 0); - } - - - /** - * Get the optional long value associated with an index. - * The defaultValue is returned if there is no value for the index, - * or if the value is not a number and cannot be converted to a number. - * @param index The index must be between 0 and length() - 1. - * @param defaultValue The default value. - * @return The value. - */ - public long optLong(int index, long defaultValue) { - try { - return getLong(index); - } catch (Exception e) { - return defaultValue; - } - } - - - /** - * Get the optional string value associated with an index. It returns an - * empty string if there is no value at that index. If the value - * is not a string and is not null, then it is coverted to a string. - * - * @param index The index must be between 0 and length() - 1. - * @return A String value. - */ - public String optString(int index) { - return optString(index, ""); - } - - - /** - * Get the optional string associated with an index. - * The defaultValue is returned if the key is not found. - * - * @param index The index must be between 0 and length() - 1. - * @param defaultValue The default value. - * @return A String value. - */ - public String optString(int index, String defaultValue) { - Object object = opt(index); - return JSONObject.NULL.equals(object) ? object.toString() : defaultValue; - } - - - /** - * Append a boolean value. This increases the array's length by one. - * - * @param value A boolean value. - * @return this. - */ - public JSONArray put(boolean value) { - put(value ? Boolean.TRUE : Boolean.FALSE); - return this; - } - - - /** - * Put a value in the JSONArray, where the value will be a - * JSONArray which is produced from a Collection. - * @param value A Collection value. - * @return this. - */ - public JSONArray put(Collection value) { - put(new JSONArray(value)); - return this; - } - - - /** - * Append a double value. This increases the array's length by one. - * - * @param value A double value. - * @throws JSONException if the value is not finite. - * @return this. - */ - public JSONArray put(double value) /*throws JSONException*/ { - Double d = new Double(value); - try { - JSONObject.testValidity(d); - } catch (JSONException e) { - e.printStackTrace(); - } - put(d); - return this; - } - - - /** - * Append an int value. This increases the array's length by one. - * - * @param value An int value. - * @return this. - */ - public JSONArray put(int value) { - put(new Integer(value)); - return this; - } - - - /** - * Append an long value. This increases the array's length by one. - * - * @param value A long value. - * @return this. - */ - public JSONArray put(long value) { - put(new Long(value)); - return this; - } - - - /** - * Put a value in the JSONArray, where the value will be a - * JSONObject which is produced from a Map. - * @param value A Map value. - * @return this. - */ - public JSONArray put(Map value) { - put(new JSONObject(value)); - return this; - } - - - /** - * Append an object value. This increases the array's length by one. - * @param value An object value. The value should be a - * Boolean, Double, Integer, JSONArray, JSONObject, Long, or String, or the - * JSONObject.NULL object. - * @return this. - */ - public JSONArray put(Object value) { - this.myArrayList.add(value); - return this; - } - - - /** - * Put or replace a boolean value in the JSONArray. If the index is greater - * than the length of the JSONArray, then null elements will be added as - * necessary to pad it out. - * @param index The subscript. - * @param value A boolean value. - * @return this. - * @throws JSONException If the index is negative. - */ - public JSONArray put(int index, boolean value) /*throws JSONException*/ { - put(index, value ? Boolean.TRUE : Boolean.FALSE); - return this; - } - - - /** - * Put a value in the JSONArray, where the value will be a - * JSONArray which is produced from a Collection. - * @param index The subscript. - * @param value A Collection value. - * @return this. - * @throws JSONException If the index is negative or if the value is - * not finite. - */ - public JSONArray put(int index, Collection value) /*throws JSONException*/ { - put(index, new JSONArray(value)); - return this; - } - - - /** - * Put or replace a double value. If the index is greater than the length of - * the JSONArray, then null elements will be added as necessary to pad - * it out. - * @param index The subscript. - * @param value A double value. - * @return this. - * @throws JSONException If the index is negative or if the value is - * not finite. - */ - public JSONArray put(int index, double value) /*throws JSONException*/ { - put(index, new Double(value)); - return this; - } - - - /** - * Put or replace an int value. If the index is greater than the length of - * the JSONArray, then null elements will be added as necessary to pad - * it out. - * @param index The subscript. - * @param value An int value. - * @return this. - * @throws JSONException If the index is negative. - */ - public JSONArray put(int index, int value) /*throws JSONException*/ { - put(index, new Integer(value)); - return this; - } - - - /** - * Put or replace a long value. If the index is greater than the length of - * the JSONArray, then null elements will be added as necessary to pad - * it out. - * @param index The subscript. - * @param value A long value. - * @return this. - * @throws JSONException If the index is negative. - */ - public JSONArray put(int index, long value) /*throws JSONException*/ { - put(index, new Long(value)); - return this; - } - - - /** - * Put a value in the JSONArray, where the value will be a - * JSONObject that is produced from a Map. - * @param index The subscript. - * @param value The Map value. - * @return this. - * @throws JSONException If the index is negative or if the the value is - * an invalid number. - */ - public JSONArray put(int index, Map value) /*throws JSONException*/ { - put(index, new JSONObject(value)); - return this; - } - - - /** - * Put or replace an object value in the JSONArray. If the index is greater - * than the length of the JSONArray, then null elements will be added as - * necessary to pad it out. - * @param index The subscript. - * @param value The value to put into the array. The value should be a - * Boolean, Double, Integer, JSONArray, JSONObject, Long, or String, or the - * JSONObject.NULL object. - * @return this. - * @throws JSONException If the index is negative or if the the value is - * an invalid number. - */ - public JSONArray put(int index, Object value) /*throws JSONException*/ { - try { - JSONObject.testValidity(value); - } catch (JSONException e) { - e.printStackTrace(); - } - - // No exceptionhandling in the sketch! - // if (index < 0) { - // throw new JSONException("JSONArray[" + index + "] not found."); - // } - if (index < length()) { - this.myArrayList.set(index, value); - } else { - while (index != length()) { - put(JSONObject.NULL); - } - put(value); - } - return this; - } - - - /** - * Remove an index and close the hole. - * @param index The index of the element to be removed. - * @return The value that was associated with the index, - * or null if there was no value. - */ - public Object remove(int index) { - Object o = opt(index); - this.myArrayList.remove(index); - return o; - } - - - /** - * Produce a JSONObject by combining a JSONArray of names with the values - * of this JSONArray. - * @param names A JSONArray containing a list of key strings. These will be - * paired with the values. - * @return A JSONObject, or null if there are no names or if this JSONArray - * has no values. - * @throws JSONException If any of the names are null. - */ - public JSONObject toJSONObject(JSONArray names) throws JSONException { - if (names == null || names.length() == 0 || length() == 0) { - return null; - } - JSONObject jo = new JSONObject(); - for (int i = 0; i < names.length(); i += 1) { - jo.put(names.getString(i), this.opt(i)); - } - return jo; - } - - - /** - * Make a JSON text of this JSONArray. For compactness, no - * unnecessary whitespace is added. If it is not possible to produce a - * syntactically correct JSON text then null will be returned instead. This - * could occur if the array contains an invalid number. - *

- * Warning: This method assumes that the data structure is acyclical. - * - * @return a printable, displayable, transmittable - * representation of the array. - */ - public String toString() { - try { - return '[' + join(",") + ']'; - } catch (Exception e) { - return null; - } - } - - - /** - * Make a prettyprinted JSON text of this JSONArray. - * Warning: This method assumes that the data structure is acyclical. - * @param indentFactor The number of spaces to add to each level of - * indentation. - * @return a printable, displayable, transmittable - * representation of the object, beginning - * with [ (left bracket) and ending - * with ] (right bracket). - * @throws JSONException - */ - public String toString(int indentFactor) throws JSONException { - return toString(indentFactor, 0); - } - - - /** - * Make a prettyprinted JSON text of this JSONArray. - * Warning: This method assumes that the data structure is acyclical. - * @param indentFactor The number of spaces to add to each level of - * indentation. - * @param indent The indention of the top level. - * @return a printable, displayable, transmittable - * representation of the array. - * @throws JSONException - */ - String toString(int indentFactor, int indent) /*throws JSONException*/ { - int len = length(); - if (len == 0) { - return "[]"; - } - int i; - StringBuffer sb = new StringBuffer("["); - if (len == 1) { - sb.append(JSONObject.valueToString(this.myArrayList.get(0), - indentFactor, indent)); - } else { - int newindent = indent + indentFactor; - sb.append('\n'); - for (i = 0; i < len; i += 1) { - if (i > 0) { - sb.append(",\n"); - } - for (int j = 0; j < newindent; j += 1) { - sb.append(' '); - } - sb.append(JSONObject.valueToString(this.myArrayList.get(i), - indentFactor, newindent)); - } - sb.append('\n'); - for (i = 0; i < indent; i += 1) { - sb.append(' '); - } - } - sb.append(']'); - return sb.toString(); - } - - - /** - * Write the contents of the JSONArray as JSON text to a writer. - * For compactness, no whitespace is added. - *

- * Warning: This method assumes that the data structure is acyclical. - * - * @return The writer. - * @throws JSONException - */ - public Writer write(Writer writer) /*throws JSONException*/ { - try { - boolean b = false; - int len = length(); - - writer.write('['); - - for (int i = 0; i < len; i += 1) { - if (b) { - writer.write(','); - } - Object v = this.myArrayList.get(i); - if (v instanceof JSONObject) { - ((JSONObject)v).write(writer); - } else if (v instanceof JSONArray) { - ((JSONArray)v).write(writer); - } else { - writer.write(JSONObject.valueToString(v)); - } - b = true; - } - writer.write(']'); - return writer; - } catch (IOException e) { -// throw new JSONException(e); - e.printStackTrace(); - } - return writer; - } +package org.json; + +/* +Copyright (c) 2002 JSON.org + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +The Software shall be used for Good, not Evil. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +import java.io.IOException; +import java.io.Writer; +import java.lang.reflect.Array; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.Map; + +/** + * A JSONArray is an ordered sequence of values. Its external text form is a + * string wrapped in square brackets with commas separating the values. The + * internal form is an object having get and opt + * methods for accessing the values by index, and put methods for + * adding or replacing values. The values can be any of these types: + * Boolean, JSONArray, JSONObject, + * Number, String, or the + * JSONObject.NULL object. + *

+ * The constructor can convert a JSON text into a Java object. The + * toString method converts to JSON text. + *

+ * A get method returns a value if one can be found, and throws an + * exception if one cannot be found. An opt method returns a + * default value instead of throwing an exception, and so is useful for + * obtaining optional values. + *

+ * The generic get() and opt() methods return an + * object which you can cast or query for type. There are also typed + * get and opt methods that do type checking and type + * coercion for you. + *

+ * The texts produced by the toString methods strictly conform to + * JSON syntax rules. The constructors are more forgiving in the texts they will + * accept: + *

    + *
  • An extra , (comma) may appear just + * before the closing bracket.
  • + *
  • The null value will be inserted when there + * is , (comma) elision.
  • + *
  • Strings may be quoted with ' (single + * quote).
  • + *
  • Strings do not need to be quoted at all if they do not begin with a quote + * or single quote, and if they do not contain leading or trailing spaces, + * and if they do not contain any of these characters: + * { } [ ] / \ : , = ; # and if they do not look like numbers + * and if they are not the reserved words true, + * false, or null.
  • + *
  • Values can be separated by ; (semicolon) as + * well as by , (comma).
  • + *
  • Numbers may have the + * 0x- (hex) prefix.
  • + *
+ + * @author JSON.org + * @version 2011-08-25 + */ +public class JSONArr { + + + /** + * The arrayList where the JSONArray's properties are kept. + */ + private ArrayList myArrayList; + + + /** + * Construct an empty JSONArray. + */ + public JSONArr() { + this.myArrayList = new ArrayList(); + } + + /** + * Construct a JSONArray from a JSONTokener. + * @param x A JSONTokener + * @throws JSONException If there is a syntax error. + */ + public JSONArr(JSONTokener x) throws JSONException { + this(); + if (x.nextClean() != '[') { +// throw x.syntaxError("A JSONArray text must start with '['"); + } + if (x.nextClean() != ']') { + x.back(); + for (;;) { + if (x.nextClean() == ',') { + x.back(); + this.myArrayList.add(JSONObj.NULL); + } else { + x.back(); + this.myArrayList.add(x.nextValue()); + } + switch (x.nextClean()) { + case ';': + case ',': + if (x.nextClean() == ']') { + return; + } + x.back(); + break; + case ']': + return; + default: +// throw x.syntaxError("Expected a ',' or ']'"); + } + } + } + } + + + /** + * Construct a JSONArray from a source JSON text. + * @param source A string that begins with + * [ (left bracket) + * and ends with ] (right bracket). + * @throws JSONException If there is a syntax error. + */ + public JSONArr(String source) throws JSONException { + this(new JSONTokener(source)); + } + + + /** + * Construct a JSONArray from a Collection. + * @param collection A Collection. + */ + public JSONArr(Collection collection) { + this.myArrayList = new ArrayList(); + if (collection != null) { + Iterator iter = collection.iterator(); + while (iter.hasNext()) { + this.myArrayList.add(JSONObj.wrap(iter.next())); + } + } + } + + + /** + * Construct a JSONArray from an array + * @throws JSONException If not an array. + */ + public JSONArr(Object array) /*throws JSONException*/ { + this(); + if (array.getClass().isArray()) { + int length = Array.getLength(array); + for (int i = 0; i < length; i += 1) { + this.put(JSONObj.wrap(Array.get(array, i))); + } + } else { +// throw new JSONException( +//"JSONArray initial value should be a string or collection or array."); + System.out.println("JSONArray initial value should be a string or collection or array."); + } + } + + + /** + * Get the object value associated with an index. + * @param index + * The index must be between 0 and length() - 1. + * @return An object value. + * @throws JSONException If there is no value for the index. + */ + public Object get(int index) /*throws JSONException*/ { + Object object = opt(index); + if (object == null) { + //throw new JSONException("JSONArray[" + index + "] not found."); + System.out.println("JSONArray[" + index + "] not found."); + } + return object; + } + + + /** + * Get the boolean value associated with an index. + * The string values "true" and "false" are converted to boolean. + * + * @param index The index must be between 0 and length() - 1. + * @return The truth. + * @throws JSONException If there is no value for the index or if the + * value is not convertible to boolean. + */ + public boolean getBoolean(int index) throws JSONException { + Object object = get(index); + if (object.equals(Boolean.FALSE) || + (object instanceof String && + ((String)object).equalsIgnoreCase("false"))) { + return false; + } else if (object.equals(Boolean.TRUE) || + (object instanceof String && + ((String)object).equalsIgnoreCase("true"))) { + return true; + } + throw new JSONException("JSONArray[" + index + "] is not a boolean."); + } + + + /** + * Get the double value associated with an index. + * + * @param index The index must be between 0 and length() - 1. + * @return The value. + * @throws JSONException If the key is not found or if the value cannot + * be converted to a number. + */ + public double getDouble(int index) throws JSONException { + Object object = get(index); + try { + return object instanceof Number ? + ((Number)object).doubleValue() : + Double.parseDouble((String)object); + } catch (Exception e) { + throw new JSONException("JSONArray[" + index + + "] is not a number."); + } + } + + + /** + * Get the int value associated with an index. + * + * @param index The index must be between 0 and length() - 1. + * @return The value. + * @throws JSONException If the key is not found or if the value is not a number. + */ + public int getInt(int index) throws JSONException { + Object object = get(index); + try { + return object instanceof Number ? + ((Number)object).intValue() : + Integer.parseInt((String)object); + } catch (Exception e) { + throw new JSONException("JSONArray[" + index + + "] is not a number."); + } + } + + + /** + * Get the JSONArray associated with an index. + * @param index The index must be between 0 and length() - 1. + * @return A JSONArray value. + * @throws JSONException If there is no value for the index. or if the + * value is not a JSONArray + */ + public JSONArr getJSONArray(int index) throws JSONException { + Object object = get(index); + if (object instanceof JSONArr) { + return (JSONArr)object; + } + throw new JSONException("JSONArray[" + index + + "] is not a JSONArray."); + } + + + /** + * Get the JSONObject associated with an index. + * @param index subscript + * @return A JSONObject value. + * @throws JSONException If there is no value for the index or if the + * value is not a JSONObject + */ + public JSONObj getJSONObject(int index) /*throws JSONException*/ { + Object object = null; +// try { + object = get(index); +// } catch (JSONException e) { +// e.printStackTrace(); +// System.out.println( "JSONArray[" + index + "] is not a JSONObject." ); +// } + + if( object == null ) + return null; + + if (object instanceof JSONObj) { + return (JSONObj)object; + } +// throw new JSONException("JSONArray[" + index + +// "] is not a JSONObject."); + return null; + } + + + /** + * Get the long value associated with an index. + * + * @param index The index must be between 0 and length() - 1. + * @return The value. + * @throws JSONException If the key is not found or if the value cannot + * be converted to a number. + */ + public long getLong(int index) throws JSONException { + Object object = get(index); + try { + return object instanceof Number ? + ((Number)object).longValue() : + Long.parseLong((String)object); + } catch (Exception e) { + throw new JSONException("JSONArray[" + index + + "] is not a number."); + } + } + + + /** + * Get the string associated with an index. + * @param index The index must be between 0 and length() - 1. + * @return A string value. + * @throws JSONException If there is no string value for the index. + */ + public String getString(int index) throws JSONException { + Object object = get(index); + if (object instanceof String) { + return (String)object; + } + throw new JSONException("JSONArray[" + index + "] not a string."); + } + + + /** + * Determine if the value is null. + * @param index The index must be between 0 and length() - 1. + * @return true if the value at the index is null, or if there is no value. + */ + public boolean isNull(int index) { + return JSONObj.NULL.equals(opt(index)); + } + + + /** + * Make a string from the contents of this JSONArray. The + * separator string is inserted between each element. + * Warning: This method assumes that the data structure is acyclical. + * @param separator A string that will be inserted between the elements. + * @return a string. + * @throws JSONException If the array contains an invalid number. + */ + public String join(String separator) throws JSONException { + int len = length(); + StringBuffer sb = new StringBuffer(); + + for (int i = 0; i < len; i += 1) { + if (i > 0) { + sb.append(separator); + } + sb.append(JSONObj.valueToString(this.myArrayList.get(i))); + } + return sb.toString(); + } + + + /** + * Get the number of elements in the JSONArray, included nulls. + * + * @return The length (or size). + */ + public int length() { + return this.myArrayList.size(); + } + + + /** + * Get the optional object value associated with an index. + * @param index The index must be between 0 and length() - 1. + * @return An object value, or null if there is no + * object at that index. + */ + public Object opt(int index) { + return (index < 0 || index >= length()) ? + null : this.myArrayList.get(index); + } + + + /** + * Get the optional boolean value associated with an index. + * It returns false if there is no value at that index, + * or if the value is not Boolean.TRUE or the String "true". + * + * @param index The index must be between 0 and length() - 1. + * @return The truth. + */ + public boolean optBoolean(int index) { + return optBoolean(index, false); + } + + + /** + * Get the optional boolean value associated with an index. + * It returns the defaultValue if there is no value at that index or if + * it is not a Boolean or the String "true" or "false" (case insensitive). + * + * @param index The index must be between 0 and length() - 1. + * @param defaultValue A boolean default. + * @return The truth. + */ + public boolean optBoolean(int index, boolean defaultValue) { + try { + return getBoolean(index); + } catch (Exception e) { + return defaultValue; + } + } + + + /** + * Get the optional double value associated with an index. + * NaN is returned if there is no value for the index, + * or if the value is not a number and cannot be converted to a number. + * + * @param index The index must be between 0 and length() - 1. + * @return The value. + */ + public double optDouble(int index) { + return optDouble(index, Double.NaN); + } + + + /** + * Get the optional double value associated with an index. + * The defaultValue is returned if there is no value for the index, + * or if the value is not a number and cannot be converted to a number. + * + * @param index subscript + * @param defaultValue The default value. + * @return The value. + */ + public double optDouble(int index, double defaultValue) { + try { + return getDouble(index); + } catch (Exception e) { + return defaultValue; + } + } + + + /** + * Get the optional int value associated with an index. + * Zero is returned if there is no value for the index, + * or if the value is not a number and cannot be converted to a number. + * + * @param index The index must be between 0 and length() - 1. + * @return The value. + */ + public int optInt(int index) { + return optInt(index, 0); + } + + + /** + * Get the optional int value associated with an index. + * The defaultValue is returned if there is no value for the index, + * or if the value is not a number and cannot be converted to a number. + * @param index The index must be between 0 and length() - 1. + * @param defaultValue The default value. + * @return The value. + */ + public int optInt(int index, int defaultValue) { + try { + return getInt(index); + } catch (Exception e) { + return defaultValue; + } + } + + + /** + * Get the optional JSONArray associated with an index. + * @param index subscript + * @return A JSONArray value, or null if the index has no value, + * or if the value is not a JSONArray. + */ + public JSONArr optJSONArray(int index) { + Object o = opt(index); + return o instanceof JSONArr ? (JSONArr)o : null; + } + + + /** + * Get the optional JSONObject associated with an index. + * Null is returned if the key is not found, or null if the index has + * no value, or if the value is not a JSONObject. + * + * @param index The index must be between 0 and length() - 1. + * @return A JSONObject value. + */ + public JSONObj optJSONObject(int index) { + Object o = opt(index); + return o instanceof JSONObj ? (JSONObj)o : null; + } + + + /** + * Get the optional long value associated with an index. + * Zero is returned if there is no value for the index, + * or if the value is not a number and cannot be converted to a number. + * + * @param index The index must be between 0 and length() - 1. + * @return The value. + */ + public long optLong(int index) { + return optLong(index, 0); + } + + + /** + * Get the optional long value associated with an index. + * The defaultValue is returned if there is no value for the index, + * or if the value is not a number and cannot be converted to a number. + * @param index The index must be between 0 and length() - 1. + * @param defaultValue The default value. + * @return The value. + */ + public long optLong(int index, long defaultValue) { + try { + return getLong(index); + } catch (Exception e) { + return defaultValue; + } + } + + + /** + * Get the optional string value associated with an index. It returns an + * empty string if there is no value at that index. If the value + * is not a string and is not null, then it is coverted to a string. + * + * @param index The index must be between 0 and length() - 1. + * @return A String value. + */ + public String optString(int index) { + return optString(index, ""); + } + + + /** + * Get the optional string associated with an index. + * The defaultValue is returned if the key is not found. + * + * @param index The index must be between 0 and length() - 1. + * @param defaultValue The default value. + * @return A String value. + */ + public String optString(int index, String defaultValue) { + Object object = opt(index); + return JSONObj.NULL.equals(object) ? object.toString() : defaultValue; + } + + + /** + * Append a boolean value. This increases the array's length by one. + * + * @param value A boolean value. + * @return this. + */ + public JSONArr put(boolean value) { + put(value ? Boolean.TRUE : Boolean.FALSE); + return this; + } + + + /** + * Put a value in the JSONArray, where the value will be a + * JSONArray which is produced from a Collection. + * @param value A Collection value. + * @return this. + */ + public JSONArr put(Collection value) { + put(new JSONArr(value)); + return this; + } + + + /** + * Append a double value. This increases the array's length by one. + * + * @param value A double value. + * @throws JSONException if the value is not finite. + * @return this. + */ + public JSONArr put(double value) /*throws JSONException*/ { + Double d = new Double(value); + try { + JSONObj.testValidity(d); + } catch (JSONException e) { + e.printStackTrace(); + } + put(d); + return this; + } + + + /** + * Append an int value. This increases the array's length by one. + * + * @param value An int value. + * @return this. + */ + public JSONArr put(int value) { + put(new Integer(value)); + return this; + } + + + /** + * Append an long value. This increases the array's length by one. + * + * @param value A long value. + * @return this. + */ + public JSONArr put(long value) { + put(new Long(value)); + return this; + } + + + /** + * Put a value in the JSONArray, where the value will be a + * JSONObject which is produced from a Map. + * @param value A Map value. + * @return this. + */ + public JSONArr put(Map value) { + put(new JSONObj(value)); + return this; + } + + + /** + * Append an object value. This increases the array's length by one. + * @param value An object value. The value should be a + * Boolean, Double, Integer, JSONArray, JSONObject, Long, or String, or the + * JSONObject.NULL object. + * @return this. + */ + public JSONArr put(Object value) { + this.myArrayList.add(value); + return this; + } + + + /** + * Put or replace a boolean value in the JSONArray. If the index is greater + * than the length of the JSONArray, then null elements will be added as + * necessary to pad it out. + * @param index The subscript. + * @param value A boolean value. + * @return this. + * @throws JSONException If the index is negative. + */ + public JSONArr put(int index, boolean value) /*throws JSONException*/ { + put(index, value ? Boolean.TRUE : Boolean.FALSE); + return this; + } + + + /** + * Put a value in the JSONArray, where the value will be a + * JSONArray which is produced from a Collection. + * @param index The subscript. + * @param value A Collection value. + * @return this. + * @throws JSONException If the index is negative or if the value is + * not finite. + */ + public JSONArr put(int index, Collection value) /*throws JSONException*/ { + put(index, new JSONArr(value)); + return this; + } + + + /** + * Put or replace a double value. If the index is greater than the length of + * the JSONArray, then null elements will be added as necessary to pad + * it out. + * @param index The subscript. + * @param value A double value. + * @return this. + * @throws JSONException If the index is negative or if the value is + * not finite. + */ + public JSONArr put(int index, double value) /*throws JSONException*/ { + put(index, new Double(value)); + return this; + } + + + /** + * Put or replace an int value. If the index is greater than the length of + * the JSONArray, then null elements will be added as necessary to pad + * it out. + * @param index The subscript. + * @param value An int value. + * @return this. + * @throws JSONException If the index is negative. + */ + public JSONArr put(int index, int value) /*throws JSONException*/ { + put(index, new Integer(value)); + return this; + } + + + /** + * Put or replace a long value. If the index is greater than the length of + * the JSONArray, then null elements will be added as necessary to pad + * it out. + * @param index The subscript. + * @param value A long value. + * @return this. + * @throws JSONException If the index is negative. + */ + public JSONArr put(int index, long value) /*throws JSONException*/ { + put(index, new Long(value)); + return this; + } + + + /** + * Put a value in the JSONArray, where the value will be a + * JSONObject that is produced from a Map. + * @param index The subscript. + * @param value The Map value. + * @return this. + * @throws JSONException If the index is negative or if the the value is + * an invalid number. + */ + public JSONArr put(int index, Map value) /*throws JSONException*/ { + put(index, new JSONObj(value)); + return this; + } + + + /** + * Put or replace an object value in the JSONArray. If the index is greater + * than the length of the JSONArray, then null elements will be added as + * necessary to pad it out. + * @param index The subscript. + * @param value The value to put into the array. The value should be a + * Boolean, Double, Integer, JSONArray, JSONObject, Long, or String, or the + * JSONObject.NULL object. + * @return this. + * @throws JSONException If the index is negative or if the the value is + * an invalid number. + */ + public JSONArr put(int index, Object value) /*throws JSONException*/ { + try { + JSONObj.testValidity(value); + } catch (JSONException e) { + e.printStackTrace(); + } + + // No exceptionhandling in the sketch! + // if (index < 0) { + // throw new JSONException("JSONArray[" + index + "] not found."); + // } + if (index < length()) { + this.myArrayList.set(index, value); + } else { + while (index != length()) { + put(JSONObj.NULL); + } + put(value); + } + return this; + } + + + /** + * Remove an index and close the hole. + * @param index The index of the element to be removed. + * @return The value that was associated with the index, + * or null if there was no value. + */ + public Object remove(int index) { + Object o = opt(index); + this.myArrayList.remove(index); + return o; + } + + + /** + * Produce a JSONObject by combining a JSONArray of names with the values + * of this JSONArray. + * @param names A JSONArray containing a list of key strings. These will be + * paired with the values. + * @return A JSONObject, or null if there are no names or if this JSONArray + * has no values. + * @throws JSONException If any of the names are null. + */ + public JSONObj toJSONObject(JSONArr names) throws JSONException { + if (names == null || names.length() == 0 || length() == 0) { + return null; + } + JSONObj jo = new JSONObj(); + for (int i = 0; i < names.length(); i += 1) { + jo.put(names.getString(i), this.opt(i)); + } + return jo; + } + + + /** + * Make a JSON text of this JSONArray. For compactness, no + * unnecessary whitespace is added. If it is not possible to produce a + * syntactically correct JSON text then null will be returned instead. This + * could occur if the array contains an invalid number. + *

+ * Warning: This method assumes that the data structure is acyclical. + * + * @return a printable, displayable, transmittable + * representation of the array. + */ + public String toString() { + try { + return '[' + join(",") + ']'; + } catch (Exception e) { + return null; + } + } + + + /** + * Make a prettyprinted JSON text of this JSONArray. + * Warning: This method assumes that the data structure is acyclical. + * @param indentFactor The number of spaces to add to each level of + * indentation. + * @return a printable, displayable, transmittable + * representation of the object, beginning + * with [ (left bracket) and ending + * with ] (right bracket). + * @throws JSONException + */ + public String toString(int indentFactor) throws JSONException { + return toString(indentFactor, 0); + } + + + /** + * Make a prettyprinted JSON text of this JSONArray. + * Warning: This method assumes that the data structure is acyclical. + * @param indentFactor The number of spaces to add to each level of + * indentation. + * @param indent The indention of the top level. + * @return a printable, displayable, transmittable + * representation of the array. + * @throws JSONException + */ + String toString(int indentFactor, int indent) /*throws JSONException*/ { + int len = length(); + if (len == 0) { + return "[]"; + } + int i; + StringBuffer sb = new StringBuffer("["); + if (len == 1) { + sb.append(JSONObj.valueToString(this.myArrayList.get(0), + indentFactor, indent)); + } else { + int newindent = indent + indentFactor; + sb.append('\n'); + for (i = 0; i < len; i += 1) { + if (i > 0) { + sb.append(",\n"); + } + for (int j = 0; j < newindent; j += 1) { + sb.append(' '); + } + sb.append(JSONObj.valueToString(this.myArrayList.get(i), + indentFactor, newindent)); + } + sb.append('\n'); + for (i = 0; i < indent; i += 1) { + sb.append(' '); + } + } + sb.append(']'); + return sb.toString(); + } + + + /** + * Write the contents of the JSONArray as JSON text to a writer. + * For compactness, no whitespace is added. + *

+ * Warning: This method assumes that the data structure is acyclical. + * + * @return The writer. + * @throws JSONException + */ + public Writer write(Writer writer) /*throws JSONException*/ { + try { + boolean b = false; + int len = length(); + + writer.write('['); + + for (int i = 0; i < len; i += 1) { + if (b) { + writer.write(','); + } + Object v = this.myArrayList.get(i); + if (v instanceof JSONObj) { + ((JSONObj)v).write(writer); + } else if (v instanceof JSONArr) { + ((JSONArr)v).write(writer); + } else { + writer.write(JSONObj.valueToString(v)); + } + b = true; + } + writer.write(']'); + return writer; + } catch (IOException e) { +// throw new JSONException(e); + e.printStackTrace(); + } + return writer; + } } \ No newline at end of file diff --git a/src/org/json/JSONML.java b/src/org/json/JSONML.java index 936d16e15..e25f265a3 100644 --- a/src/org/json/JSONML.java +++ b/src/org/json/JSONML.java @@ -48,14 +48,14 @@ public class JSONML { private static Object parse( XMLTokener x, boolean arrayForm, - JSONArray ja + JSONArr ja ) throws JSONException { String attribute; char c; String closeTag = null; int i; - JSONArray newja = null; - JSONObject newjo = null; + JSONArr newja = null; + JSONObj newjo = null; Object token; String tagName = null; @@ -67,7 +67,7 @@ private static Object parse( while (true) { if (!x.more()) { - throw x.syntaxError("Bad XML"); +// throw x.syntaxError("Bad XML"); } token = x.nextContent(); if (token == XML.LT) { @@ -84,7 +84,7 @@ private static Object parse( token + "'."); } if (x.nextToken() != XML.GT) { - throw x.syntaxError("Misshaped close tag"); +// throw x.syntaxError("Misshaped close tag"); } return token; } else if (token == XML.BANG) { @@ -104,14 +104,14 @@ private static Object parse( ja.put(x.nextCDATA()); } } else { - throw x.syntaxError("Expected 'CDATA['"); +// throw x.syntaxError("Expected 'CDATA['"); } } else { i = 1; do { token = x.nextMeta(); if (token == null) { - throw x.syntaxError("Missing '>' after '' after '"); } else { - throw x.syntaxError("Misshaped tag"); +// throw x.syntaxError("Misshaped tag"); } // Open tag < } else { if (!(token instanceof String)) { - throw x.syntaxError("Bad tagName '" + token + "'."); +// throw x.syntaxError("Bad tagName '" + token + "'."); } tagName = (String)token; - newja = new JSONArray(); - newjo = new JSONObject(); + newja = new JSONArr(); + newjo = new JSONObj(); if (arrayForm) { newja.put(tagName); if (ja != null) { @@ -154,7 +154,7 @@ private static Object parse( token = x.nextToken(); } if (token == null) { - throw x.syntaxError("Misshaped tag"); +// throw x.syntaxError("Misshaped tag"); } if (!(token instanceof String)) { break; @@ -164,13 +164,13 @@ private static Object parse( attribute = (String)token; if (!arrayForm && (attribute == "tagName" || attribute == "childNode")) { - throw x.syntaxError("Reserved attribute."); +// throw x.syntaxError("Reserved attribute."); } token = x.nextToken(); if (token == XML.EQ) { token = x.nextToken(); if (!(token instanceof String)) { - throw x.syntaxError("Missing value"); +// throw x.syntaxError("Missing value"); } newjo.accumulate(attribute, XML.stringToValue((String)token)); token = null; @@ -186,7 +186,7 @@ private static Object parse( if (token == XML.SLASH) { if (x.nextToken() != XML.GT) { - throw x.syntaxError("Misshaped tag"); +// throw x.syntaxError("Misshaped tag"); } if (ja == null) { if (arrayForm) { @@ -200,13 +200,13 @@ private static Object parse( } else { if (token != XML.GT) { - throw x.syntaxError("Misshaped tag"); +// throw x.syntaxError("Misshaped tag"); } closeTag = (String)parse(x, arrayForm, newja); if (closeTag != null) { if (!closeTag.equals(tagName)) { - throw x.syntaxError("Mismatched '" + tagName + - "' and '" + closeTag + "'"); +// throw x.syntaxError("Mismatched '" + tagName + +// "' and '" + closeTag + "'"); } tagName = null; if (!arrayForm && newja.length() > 0) { @@ -244,7 +244,7 @@ private static Object parse( * @return A JSONArray containing the structured data from the XML string. * @throws JSONException */ - public static JSONArray toJSONArray(String string) throws JSONException { + public static JSONArr toJSONArray(String string) throws JSONException { return toJSONArray(new XMLTokener(string)); } @@ -261,8 +261,8 @@ public static JSONArray toJSONArray(String string) throws JSONException { * @return A JSONArray containing the structured data from the XML string. * @throws JSONException */ - public static JSONArray toJSONArray(XMLTokener x) throws JSONException { - return (JSONArray)parse(x, true, null); + public static JSONArr toJSONArray(XMLTokener x) throws JSONException { + return (JSONArr)parse(x, true, null); } @@ -279,8 +279,8 @@ public static JSONArray toJSONArray(XMLTokener x) throws JSONException { * @return A JSONObject containing the structured data from the XML string. * @throws JSONException */ - public static JSONObject toJSONObject(XMLTokener x) throws JSONException { - return (JSONObject)parse(x, false, null); + public static JSONObj toJSONObject(XMLTokener x) throws JSONException { + return (JSONObj)parse(x, false, null); } @@ -297,7 +297,7 @@ public static JSONObject toJSONObject(XMLTokener x) throws JSONException { * @return A JSONObject containing the structured data from the XML string. * @throws JSONException */ - public static JSONObject toJSONObject(String string) throws JSONException { + public static JSONObj toJSONObject(String string) throws JSONException { return toJSONObject(new XMLTokener(string)); } @@ -308,9 +308,9 @@ public static JSONObject toJSONObject(String string) throws JSONException { * @return An XML string. * @throws JSONException */ - public static String toString(JSONArray ja) throws JSONException { + public static String toString(JSONArr ja) throws JSONException { int i; - JSONObject jo; + JSONObj jo; String key; Iterator keys; int length; @@ -328,9 +328,9 @@ public static String toString(JSONArray ja) throws JSONException { sb.append(tagName); object = ja.opt(1); - if (object instanceof JSONObject) { + if (object instanceof JSONObj) { i = 2; - jo = (JSONObject)object; + jo = (JSONObj)object; // Emit the attributes @@ -366,10 +366,10 @@ public static String toString(JSONArray ja) throws JSONException { if (object != null) { if (object instanceof String) { sb.append(XML.escape(object.toString())); - } else if (object instanceof JSONObject) { - sb.append(toString((JSONObject)object)); - } else if (object instanceof JSONArray) { - sb.append(toString((JSONArray)object)); + } else if (object instanceof JSONObj) { + sb.append(toString((JSONObj)object)); + } else if (object instanceof JSONArr) { + sb.append(toString((JSONArr)object)); } } } while (i < length); @@ -390,10 +390,10 @@ public static String toString(JSONArray ja) throws JSONException { * @return An XML string. * @throws JSONException */ - public static String toString(JSONObject jo) throws JSONException { + public static String toString(JSONObj jo) throws JSONException { StringBuffer sb = new StringBuffer(); int i; - JSONArray ja; + JSONArr ja; String key; Iterator keys; int length; @@ -445,10 +445,10 @@ public static String toString(JSONObject jo) throws JSONException { if (object != null) { if (object instanceof String) { sb.append(XML.escape(object.toString())); - } else if (object instanceof JSONObject) { - sb.append(toString((JSONObject)object)); - } else if (object instanceof JSONArray) { - sb.append(toString((JSONArray)object)); + } else if (object instanceof JSONObj) { + sb.append(toString((JSONObj)object)); + } else if (object instanceof JSONArr) { + sb.append(toString((JSONArr)object)); } else { sb.append(object.toString()); } diff --git a/src/org/json/JSONObject.java b/src/org/json/JSONObj.java similarity index 91% rename from src/org/json/JSONObject.java rename to src/org/json/JSONObj.java index 677b0e793..d3e00fb87 100644 --- a/src/org/json/JSONObject.java +++ b/src/org/json/JSONObj.java @@ -92,7 +92,7 @@ of this software and associated documentation files (the "Software"), to deal * @author JSON.org * @version 2011-10-16 */ -public class JSONObject { +public class JSONObj { /** * JSONObject.NULL is equivalent to the value that JavaScript calls null, @@ -149,7 +149,7 @@ public String toString() { /** * Construct an empty JSONObject. */ - public JSONObject() { + public JSONObj() { this.map = new HashMap(); } @@ -167,7 +167,7 @@ public JSONObject() { * If a value is a non-finite number or if a name is * duplicated. */ - public JSONObject(JSONObject jo, String[] names) { + public JSONObj(JSONObj jo, String[] names) { this(); for (int i = 0; i < names.length; i += 1) { try { @@ -186,25 +186,25 @@ public JSONObject(JSONObject jo, String[] names) { * If there is a syntax error in the source string or a * duplicated key. */ - public JSONObject(JSONTokener x) /* throws JSONException */{ + public JSONObj(JSONTokener x) /* throws JSONException */{ this(); char c = 0; String key = null; - try { +// try { if (x.nextClean() != '{') { System.out.println("A JSONObject text must begin with '{'"); // throw x.syntaxError("A JSONObject text must begin with '{'"); } - } catch (JSONException e2) { - e2.printStackTrace(); - } +// } catch (JSONException e2) { +// e2.printStackTrace(); +// } for (;;) { - try { +// try { c = x.nextClean(); - } catch (JSONException e1) { - e1.printStackTrace(); - } +// } catch (JSONException e1) { +// e1.printStackTrace(); +// } switch (c) { case 0: System.out.println("A JSONObject text must end with '}'"); @@ -212,43 +212,43 @@ public JSONObject(JSONTokener x) /* throws JSONException */{ case '}': return; default: - try { +// try { x.back(); key = x.nextValue().toString(); - } catch (JSONException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } +// } catch (JSONException e1) { +// // TODO Auto-generated catch block +// e1.printStackTrace(); +// } } // The key is followed by ':'. We will also tolerate '=' or '=>'. - try { +// try { c = x.nextClean(); - } catch (JSONException e) { - e.printStackTrace(); - } +// } catch (JSONException e) { +// e.printStackTrace(); +// } if (c == '=') { - try { +// try { if (x.next() != '>') { x.back(); } - } catch (JSONException e) { - e.printStackTrace(); - } +// } catch (JSONException e) { +// e.printStackTrace(); +// } } else if (c != ':') { System.out.println("JSON Error: Expected a ':' after a key"); // throw x.syntaxError("Expected a ':' after a key"); } - try { +// try { putOnce(key, x.nextValue()); - } catch (JSONException e) { - e.printStackTrace(); - } +// } catch (JSONException e) { +// e.printStackTrace(); +// } // Pairs are separated by ','. We will also tolerate ';'. - try { +// try { switch (x.nextClean()) { case ';': case ',': @@ -259,12 +259,12 @@ public JSONObject(JSONTokener x) /* throws JSONException */{ break; case '}': return; - default: - throw x.syntaxError("Expected a ',' or '}'"); +// default: +// throw x.syntaxError("Expected a ',' or '}'"); } - } catch (JSONException e) { - e.printStackTrace(); - } +// } catch (JSONException e) { +// e.printStackTrace(); +// } } } @@ -276,7 +276,7 @@ public JSONObject(JSONTokener x) /* throws JSONException */{ * the JSONObject. * @throws JSONException */ - public JSONObject(Map map) { + public JSONObj(Map map) { this.map = new HashMap(); if (map != null) { Iterator i = map.entrySet().iterator(); @@ -311,7 +311,7 @@ public JSONObject(Map map) { * An object that has getter methods that should be used to make * a JSONObject. */ - public JSONObject(Object bean) { + public JSONObj(Object bean) { this(); populateMap(bean); } @@ -330,7 +330,7 @@ public JSONObject(Object bean) { * An array of strings, the names of the fields to be obtained * from the object. */ - public JSONObject(Object object, String names[]) { + public JSONObj(Object object, String names[]) { this(); Class c = object.getClass(); for (int i = 0; i < names.length; i += 1) { @@ -354,7 +354,7 @@ public JSONObject(Object object, String names[]) { * If there is a syntax error in the source string or a * duplicated key. */ - public JSONObject(String source) /* throws JSONException */{ + public JSONObj(String source) /* throws JSONException */{ this(new JSONTokener(source)); } @@ -368,7 +368,7 @@ public JSONObject(String source) /* throws JSONException */{ * @throws JSONException * If any JSONExceptions are detected. */ - public JSONObject(String baseName, Locale locale) /*throws JSONException*/ { + public JSONObj(String baseName, Locale locale) /*throws JSONException*/ { this(); ResourceBundle bundle = ResourceBundle.getBundle(baseName, locale, Thread.currentThread().getContextClassLoader()); @@ -388,12 +388,12 @@ public JSONObject(String baseName, Locale locale) /*throws JSONException*/ { String[] path = ((String) key).split("\\."); int last = path.length - 1; - JSONObject target = this; + JSONObj target = this; for (int i = 0; i < last; i += 1) { String segment = path[i]; - JSONObject nextTarget = target.optJSONObject(segment); + JSONObj nextTarget = target.optJSONObject(segment); if (nextTarget == null) { - nextTarget = new JSONObject(); + nextTarget = new JSONObj(); target.put(segment, nextTarget); } target = nextTarget; @@ -422,7 +422,7 @@ public JSONObject(String baseName, Locale locale) /*throws JSONException*/ { * @throws JSONException * If the value is an invalid number or if the key is null. */ - public JSONObject accumulate(String key, Object value) /*throws JSONException*/ { + public JSONObj accumulate(String key, Object value) /*throws JSONException*/ { try { testValidity(value); } catch (JSONException e) { @@ -430,12 +430,12 @@ public JSONObject accumulate(String key, Object value) /*throws JSONException*/ } Object object = opt(key); if (object == null) { - put(key, value instanceof JSONArray ? new JSONArray().put(value) + put(key, value instanceof JSONArr ? new JSONArr().put(value) : value); - } else if (object instanceof JSONArray) { - ((JSONArray) object).put(value); + } else if (object instanceof JSONArr) { + ((JSONArr) object).put(value); } else { - put(key, new JSONArray().put(object).put(value)); + put(key, new JSONArr().put(object).put(value)); } return this; } @@ -455,7 +455,7 @@ public JSONObject accumulate(String key, Object value) /*throws JSONException*/ * If the key is null or if the current value associated with * the key is not a JSONArray. */ - public JSONObject append(String key, Object value) /*throws JSONException*/ { + public JSONObj append(String key, Object value) /*throws JSONException*/ { try { testValidity(value); } catch (JSONException e) { @@ -465,9 +465,9 @@ public JSONObject append(String key, Object value) /*throws JSONException*/ { } Object object = opt(key); if (object == null) { - put(key, new JSONArray().put(value)); - } else if (object instanceof JSONArray) { - put(key, ((JSONArray) object).put(value)); + put(key, new JSONArr().put(value)); + } else if (object instanceof JSONArr) { + put(key, ((JSONArr) object).put(value)); } else { // throw new JSONException("JSONObject[" + key // + "] is not a JSONArray."); @@ -613,10 +613,10 @@ public int getInt(String key) /*throws JSONException*/ { * @throws JSONException * if the key is not found or if the value is not a JSONArray. */ - public JSONArray getJSONArray(String key) /*throws JSONException*/ { + public JSONArr getJSONArray(String key) /*throws JSONException*/ { Object object = get(key); - if (object instanceof JSONArray) { - return (JSONArray) object; + if (object instanceof JSONArr) { + return (JSONArr) object; } // throw new JSONException("JSONObject[" + quote(key) // + "] is not a JSONArray."); @@ -634,10 +634,10 @@ public JSONArray getJSONArray(String key) /*throws JSONException*/ { * @throws JSONException * if the key is not found or if the value is not a JSONObject. */ - public JSONObject getJSONObject(String key) { + public JSONObj getJSONObject(String key) { Object object = get(key); - if (object instanceof JSONObject) { - return (JSONObject) object; + if (object instanceof JSONObj) { + return (JSONObj) object; } // throw new JSONException("JSONObject[" + quote(key) // + "] is not a JSONObject."); @@ -673,7 +673,7 @@ public long getLong(String key) /*throws JSONException*/ { * * @return An array of field names, or null if there are no names. */ - public static String[] getNames(JSONObject jo) { + public static String[] getNames(JSONObj jo) { int length = jo.length(); if (length == 0) { return null; @@ -752,7 +752,7 @@ public boolean has(String key) { * If there is already a property with this name that is not an * Integer, Long, Double, or Float. */ - public JSONObject increment(String key) /*throws JSONException*/ { + public JSONObj increment(String key) /*throws JSONException*/ { Object value = opt(key); if (value == null) { put(key, 1); @@ -781,7 +781,7 @@ public JSONObject increment(String key) /*throws JSONException*/ { * is the JSONObject.NULL object. */ public boolean isNull(String key) { - return JSONObject.NULL.equals(opt(key)); + return JSONObj.NULL.equals(opt(key)); } /** @@ -809,8 +809,8 @@ public int length() { * @return A JSONArray containing the key strings, or null if the JSONObject * is empty. */ - public JSONArray names() { - JSONArray ja = new JSONArray(); + public JSONArr names() { + JSONArr ja = new JSONArr(); Iterator keys = this.keys(); while (keys.hasNext()) { ja.put(keys.next()); @@ -968,9 +968,9 @@ public int optInt(String key, int defaultValue) { * A key string. * @return A JSONArray which is the value. */ - public JSONArray optJSONArray(String key) { + public JSONArr optJSONArray(String key) { Object o = opt(key); - return o instanceof JSONArray ? (JSONArray) o : null; + return o instanceof JSONArr ? (JSONArr) o : null; } /** @@ -981,9 +981,9 @@ public JSONArray optJSONArray(String key) { * A key string. * @return A JSONObject which is the value. */ - public JSONObject optJSONObject(String key) { + public JSONObj optJSONObject(String key) { Object object = opt(key); - return object instanceof JSONObject ? (JSONObject) object : null; + return object instanceof JSONObj ? (JSONObj) object : null; } /** @@ -1103,7 +1103,7 @@ private void populateMap(Object bean) { * @throws JSONException * If the key is null. */ - public JSONObject put(String key, boolean value) /* throws JSONException */{ + public JSONObj put(String key, boolean value) /* throws JSONException */{ put(key, value ? Boolean.TRUE : Boolean.FALSE); return this; } @@ -1119,8 +1119,8 @@ public JSONObject put(String key, boolean value) /* throws JSONException */{ * @return this. * @throws JSONException */ - public JSONObject put(String key, Collection value) /* throws JSONException */{ - put(key, new JSONArray(value)); + public JSONObj put(String key, Collection value) /* throws JSONException */{ + put(key, new JSONArr(value)); return this; } @@ -1135,7 +1135,7 @@ public JSONObject put(String key, Collection value) /* throws JSONException */{ * @throws JSONException * If the key is null or if the number is invalid. */ - public JSONObject put(String key, double value) /* throws JSONException */{ + public JSONObj put(String key, double value) /* throws JSONException */{ put(key, new Double(value)); return this; } @@ -1151,7 +1151,7 @@ public JSONObject put(String key, double value) /* throws JSONException */{ * @throws JSONException * If the key is null. */ - public JSONObject put(String key, int value) /* throws JSONException */{ + public JSONObj put(String key, int value) /* throws JSONException */{ put(key, new Integer(value)); return this; } @@ -1167,7 +1167,7 @@ public JSONObject put(String key, int value) /* throws JSONException */{ * @throws JSONException * If the key is null. */ - public JSONObject put(String key, long value) /* throws JSONException */{ + public JSONObj put(String key, long value) /* throws JSONException */{ put(key, new Long(value)); return this; } @@ -1183,8 +1183,8 @@ public JSONObject put(String key, long value) /* throws JSONException */{ * @return this. * @throws JSONException */ - public JSONObject put(String key, Map value) /* throws JSONException */{ - put(key, new JSONObject(value)); + public JSONObj put(String key, Map value) /* throws JSONException */{ + put(key, new JSONObj(value)); return this; } @@ -1202,7 +1202,7 @@ public JSONObject put(String key, Map value) /* throws JSONException */{ * @throws JSONException * If the value is non-finite number or if the key is null. */ - public JSONObject put(String key, Object value) { + public JSONObj put(String key, Object value) { // In processing, we want to avoid forcing the user to Exception // handling! // if (key == null) { @@ -1238,7 +1238,7 @@ public JSONObject put(String key, Object value) { * @throws JSONException * if the key is a duplicate */ - public JSONObject putOnce(String key, Object value) /*throws JSONException*/ { + public JSONObj putOnce(String key, Object value) /*throws JSONException*/ { if (key != null && value != null) { if (opt(key) != null) { // throw new JSONException("Duplicate key \"" + key + "\""); @@ -1263,7 +1263,7 @@ public JSONObject putOnce(String key, Object value) /*throws JSONException*/ { * @throws JSONException * If the value is a non-finite number. */ - public JSONObject putOpt(String key, Object value) /*throws JSONException*/ { + public JSONObj putOpt(String key, Object value) /*throws JSONException*/ { if (key != null && value != null) { put(key, value); } @@ -1369,7 +1369,7 @@ public static Object stringToValue(String string) { return Boolean.FALSE; } if (string.equalsIgnoreCase("null")) { - return JSONObject.NULL; + return JSONObj.NULL; } /* @@ -1446,11 +1446,11 @@ public static void testValidity(Object o) throws JSONException { * @throws JSONException * If any of the values are non-finite numbers. */ - public JSONArray toJSONArray(JSONArray names) throws JSONException { + public JSONArr toJSONArray(JSONArr names) throws JSONException { if (names == null || names.length() == 0) { return null; } - JSONArray ja = new JSONArray(); + JSONArr ja = new JSONArr(); for (int i = 0; i < names.length(); i += 1) { ja.put(this.opt(names.getString(i))); } @@ -1611,18 +1611,18 @@ public static String valueToString(Object value) /*throws JSONException*/ { if (value instanceof Number) { return numberToString((Number) value); } - if (value instanceof Boolean || value instanceof JSONObject - || value instanceof JSONArray) { + if (value instanceof Boolean || value instanceof JSONObj + || value instanceof JSONArr) { return value.toString(); } if (value instanceof Map) { - return new JSONObject((Map) value).toString(); + return new JSONObj((Map) value).toString(); } if (value instanceof Collection) { - return new JSONArray((Collection) value).toString(); + return new JSONArr((Collection) value).toString(); } if (value.getClass().isArray()) { - return new JSONArray(value).toString(); + return new JSONArr(value).toString(); } return quote(value.toString()); } @@ -1665,21 +1665,21 @@ static String valueToString(Object value, int indentFactor, int indent) if (value instanceof Boolean) { return value.toString(); } - if (value instanceof JSONObject) { - return ((JSONObject) value).toString(indentFactor, indent); + if (value instanceof JSONObj) { + return ((JSONObj) value).toString(indentFactor, indent); } - if (value instanceof JSONArray) { - return ((JSONArray) value).toString(indentFactor, indent); + if (value instanceof JSONArr) { + return ((JSONArr) value).toString(indentFactor, indent); } if (value instanceof Map) { - return new JSONObject((Map) value).toString(indentFactor, indent); + return new JSONObj((Map) value).toString(indentFactor, indent); } if (value instanceof Collection) { - return new JSONArray((Collection) value).toString(indentFactor, + return new JSONArr((Collection) value).toString(indentFactor, indent); } if (value.getClass().isArray()) { - return new JSONArray(value).toString(indentFactor, indent); + return new JSONArr(value).toString(indentFactor, indent); } return quote(value.toString()); } @@ -1701,7 +1701,7 @@ public static Object wrap(Object object) { if (object == null) { return NULL; } - if (object instanceof JSONObject || object instanceof JSONArray + if (object instanceof JSONObj || object instanceof JSONArr || NULL.equals(object) || object instanceof JSONString || object instanceof Byte || object instanceof Character || object instanceof Short || object instanceof Integer @@ -1712,13 +1712,13 @@ public static Object wrap(Object object) { } if (object instanceof Collection) { - return new JSONArray((Collection) object); + return new JSONArr((Collection) object); } if (object.getClass().isArray()) { - return new JSONArray(object); + return new JSONArr(object); } if (object instanceof Map) { - return new JSONObject((Map) object); + return new JSONObj((Map) object); } Package objectPackage = object.getClass().getPackage(); String objectPackageName = objectPackage != null ? objectPackage @@ -1728,7 +1728,7 @@ public static Object wrap(Object object) { || object.getClass().getClassLoader() == null) { return object.toString(); } - return new JSONObject(object); + return new JSONObj(object); } catch (Exception exception) { return null; } @@ -1757,10 +1757,10 @@ public Writer write(Writer writer) /*throws JSONException*/ { writer.write(quote(key.toString())); writer.write(':'); Object value = this.map.get(key); - if (value instanceof JSONObject) { - ((JSONObject) value).write(writer); - } else if (value instanceof JSONArray) { - ((JSONArray) value).write(writer); + if (value instanceof JSONObj) { + ((JSONObj) value).write(writer); + } else if (value instanceof JSONArr) { + ((JSONArr) value).write(writer); } else { writer.write(valueToString(value)); } diff --git a/src/org/json/JSONTokener.java b/src/org/json/JSONTokener.java index f7d8bdff9..5a959ad84 100644 --- a/src/org/json/JSONTokener.java +++ b/src/org/json/JSONTokener.java @@ -7,6 +7,9 @@ import java.io.Reader; import java.io.StringReader; +import org.json.JSON.JSONArray; +import org.json.JSON.JSONObject; + /* Copyright (c) 2002 JSON.org @@ -29,417 +32,407 @@ of this software and associated documentation files (the "Software"), to deal LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ + */ /** * A JSONTokener takes a source string and extracts characters and tokens from * it. It is used by the JSONObject and JSONArray constructors to parse * JSON source strings. * @author JSON.org - * @version 2010-12-24 + * @version 2012-02-16 */ public class JSONTokener { - private int character; - private boolean eof; - private int index; - private int line; - private char previous; - private Reader reader; - private boolean usePrevious; - - - /** - * Construct a JSONTokener from a Reader. - * - * @param reader A reader. - */ - public JSONTokener(Reader reader) { - this.reader = reader.markSupported() ? - reader : new BufferedReader(reader); - this.eof = false; - this.usePrevious = false; - this.previous = 0; - this.index = 0; - this.character = 1; - this.line = 1; + private long character; + private boolean eof; + private long index; + private long line; + private char previous; + private Reader reader; + private boolean usePrevious; + + + /** + * Construct a JSONTokener from a Reader. + * + * @param reader A reader. + */ + public JSONTokener(Reader reader) { + this.reader = reader.markSupported() + ? reader + : new BufferedReader(reader); + this.eof = false; + this.usePrevious = false; + this.previous = 0; + this.index = 0; + this.character = 1; + this.line = 1; + } + + + /** + * Construct a JSONTokener from an InputStream. + */ + public JSONTokener(InputStream inputStream) { + this(new InputStreamReader(inputStream)); + } + + + /** + * Construct a JSONTokener from a string. + * + * @param s A source string. + */ + public JSONTokener(String s) { + this(new StringReader(s)); + } + + + /** + * Back up one character. This provides a sort of lookahead capability, + * so that you can test for a digit or letter before attempting to parse + * the next number or identifier. + */ + public void back() { + if (this.usePrevious || this.index <= 0) { + throw new RuntimeException("Stepping back two steps is not supported"); } - - - /** - * Construct a JSONTokener from an InputStream. - */ - public JSONTokener(InputStream inputStream) throws JSONException { - this(new InputStreamReader(inputStream)); + this.index -= 1; + this.character -= 1; + this.usePrevious = true; + this.eof = false; + } + + + /** + * Get the hex value of a character (base16). + * @param c A character between '0' and '9' or between 'A' and 'F' or + * between 'a' and 'f'. + * @return An int between 0 and 15, or -1 if c was not a hex digit. + */ + public static int dehexchar(char c) { + if (c >= '0' && c <= '9') { + return c - '0'; } - - - /** - * Construct a JSONTokener from a string. - * - * @param s A source string. - */ - public JSONTokener(String s) { - this(new StringReader(s)); + if (c >= 'A' && c <= 'F') { + return c - ('A' - 10); } - - - /** - * Back up one character. This provides a sort of lookahead capability, - * so that you can test for a digit or letter before attempting to parse - * the next number or identifier. - */ - public void back() throws JSONException { - if (usePrevious || index <= 0) { - throw new JSONException("Stepping back two steps is not supported"); - } - this.index -= 1; - this.character -= 1; - this.usePrevious = true; - this.eof = false; + if (c >= 'a' && c <= 'f') { + return c - ('a' - 10); } - - - /** - * Get the hex value of a character (base16). - * @param c A character between '0' and '9' or between 'A' and 'F' or - * between 'a' and 'f'. - * @return An int between 0 and 15, or -1 if c was not a hex digit. - */ - public static int dehexchar(char c) { - if (c >= '0' && c <= '9') { - return c - '0'; - } - if (c >= 'A' && c <= 'F') { - return c - ('A' - 10); - } - if (c >= 'a' && c <= 'f') { - return c - ('a' - 10); - } - return -1; + return -1; + } + + public boolean end() { + return this.eof && !this.usePrevious; + } + + + /** + * Determine if the source string still contains characters that next() + * can consume. + * @return true if not yet at the end of the source. + */ + public boolean more() { + this.next(); + if (this.end()) { + return false; } - - public boolean end() { - return eof && !usePrevious; + this.back(); + return true; + } + + + /** + * Get the next character in the source string. + * + * @return The next character, or 0 if past the end of the source string. + */ + public char next() { + int c; + if (this.usePrevious) { + this.usePrevious = false; + c = this.previous; + } else { + try { + c = this.reader.read(); + } catch (IOException exception) { + throw new RuntimeException(exception); + } + + if (c <= 0) { // End of stream + this.eof = true; + c = 0; + } } - - - /** - * Determine if the source string still contains characters that next() - * can consume. - * @return true if not yet at the end of the source. - */ - public boolean more() throws JSONException { - next(); - if (end()) { - return false; - } - back(); - return true; + this.index += 1; + if (this.previous == '\r') { + this.line += 1; + this.character = c == '\n' ? 0 : 1; + } else if (c == '\n') { + this.line += 1; + this.character = 0; + } else { + this.character += 1; } - - - /** - * Get the next character in the source string. - * - * @return The next character, or 0 if past the end of the source string. - */ - public char next() throws JSONException { - int c; - if (this.usePrevious) { - this.usePrevious = false; - c = this.previous; - } else { - try { - c = this.reader.read(); - } catch (IOException exception) { - throw new JSONException(exception); - } - - if (c <= 0) { // End of stream - this.eof = true; - c = 0; - } - } - this.index += 1; - if (this.previous == '\r') { - this.line += 1; - this.character = c == '\n' ? 0 : 1; - } else if (c == '\n') { - this.line += 1; - this.character = 0; - } else { - this.character += 1; - } - this.previous = (char) c; - return this.previous; + this.previous = (char) c; + return this.previous; + } + + + /** + * Consume the next character, and check that it matches a specified + * character. + * @param c The character to match. + * @return The character. + * @throws JSONException if the character does not match. + */ + public char next(char c) { + char n = this.next(); + if (n != c) { + throw new RuntimeException("Expected '" + c + "' and instead saw '" + n + "'"); } - - - /** - * Consume the next character, and check that it matches a specified - * character. - * @param c The character to match. - * @return The character. - * @throws JSONException if the character does not match. - */ - public char next(char c) throws JSONException { - char n = next(); - if (n != c) { - throw syntaxError("Expected '" + c + "' and instead saw '" + - n + "'"); - } - return n; + return n; + } + + + /** + * Get the next n characters. + * + * @param n The number of characters to take. + * @return A string of n characters. + * @throws JSONException + * Substring bounds error if there are not + * n characters remaining in the source string. + */ + public String next(int n) { + if (n == 0) { + return ""; } + char[] chars = new char[n]; + int pos = 0; - /** - * Get the next n characters. - * - * @param n The number of characters to take. - * @return A string of n characters. - * @throws JSONException - * Substring bounds error if there are not - * n characters remaining in the source string. - */ - public String next(int n) throws JSONException { - if (n == 0) { - return ""; - } - - char[] chars = new char[n]; - int pos = 0; - - while (pos < n) { - chars[pos] = next(); - if (end()) { - throw syntaxError("Substring bounds error"); - } - pos += 1; - } - return new String(chars); - } - - - /** - * Get the next char in the string, skipping whitespace. - * @throws JSONException - * @return A character, or 0 if there are no more characters. - */ - public char nextClean() throws JSONException { - for (;;) { - char c = next(); - if (c == 0 || c > ' ') { - return c; - } - } + while (pos < n) { + chars[pos] = this.next(); + if (this.end()) { + throw new RuntimeException("Substring bounds error"); + } + pos += 1; } - - - /** - * Return the characters up to the next close quote character. - * Backslash processing is done. The formal JSON format does not - * allow strings in single quotes, but an implementation is allowed to - * accept them. - * @param quote The quoting character, either - * " (double quote) or - * ' (single quote). - * @return A String. - * @throws JSONException Unterminated string. - */ - public String nextString(char quote) throws JSONException { - char c; - StringBuffer sb = new StringBuffer(); - for (;;) { - c = next(); - switch (c) { - case 0: - case '\n': - case '\r': - throw syntaxError("Unterminated string"); - case '\\': - c = next(); - switch (c) { - case 'b': - sb.append('\b'); - break; - case 't': - sb.append('\t'); - break; - case 'n': - sb.append('\n'); - break; - case 'f': - sb.append('\f'); - break; - case 'r': - sb.append('\r'); - break; - case 'u': - sb.append((char)Integer.parseInt(next(4), 16)); - break; - case '"': - case '\'': - case '\\': - case '/': - sb.append(c); - break; - default: - throw syntaxError("Illegal escape."); - } - break; - default: - if (c == quote) { - return sb.toString(); - } - sb.append(c); - } + return new String(chars); + } + + + /** + * Get the next char in the string, skipping whitespace. + * @throws JSONException + * @return A character, or 0 if there are no more characters. + */ + public char nextClean() { + for (;;) { + char c = this.next(); + if (c == 0 || c > ' ') { + return c; + } + } + } + + + /** + * Return the characters up to the next close quote character. + * Backslash processing is done. The formal JSON format does not + * allow strings in single quotes, but an implementation is allowed to + * accept them. + * @param quote The quoting character, either + * " (double quote) or + * ' (single quote). + * @return A String. + * @throws JSONException Unterminated string. + */ + public String nextString(char quote) { + char c; + StringBuffer sb = new StringBuffer(); + for (;;) { + c = this.next(); + switch (c) { + case 0: + case '\n': + case '\r': + throw new RuntimeException("Unterminated string"); + case '\\': + c = this.next(); + switch (c) { + case 'b': + sb.append('\b'); + break; + case 't': + sb.append('\t'); + break; + case 'n': + sb.append('\n'); + break; + case 'f': + sb.append('\f'); + break; + case 'r': + sb.append('\r'); + break; + case 'u': + sb.append((char)Integer.parseInt(this.next(4), 16)); + break; + case '"': + case '\'': + case '\\': + case '/': + sb.append(c); + break; + default: + throw new RuntimeException("Illegal escape."); } + break; + default: + if (c == quote) { + return sb.toString(); + } + sb.append(c); + } } - - - /** - * Get the text up but not including the specified character or the - * end of line, whichever comes first. - * @param delimiter A delimiter character. - * @return A string. - */ - public String nextTo(char delimiter) throws JSONException { - StringBuffer sb = new StringBuffer(); - for (;;) { - char c = next(); - if (c == delimiter || c == 0 || c == '\n' || c == '\r') { - if (c != 0) { - back(); - } - return sb.toString().trim(); - } - sb.append(c); + } + + + /** + * Get the text up but not including the specified character or the + * end of line, whichever comes first. + * @param delimiter A delimiter character. + * @return A string. + */ + public String nextTo(char delimiter) { + StringBuffer sb = new StringBuffer(); + for (;;) { + char c = this.next(); + if (c == delimiter || c == 0 || c == '\n' || c == '\r') { + if (c != 0) { + this.back(); } + return sb.toString().trim(); + } + sb.append(c); } - - - /** - * Get the text up but not including one of the specified delimiter - * characters or the end of line, whichever comes first. - * @param delimiters A set of delimiter characters. - * @return A string, trimmed. - */ - public String nextTo(String delimiters) throws JSONException { - char c; - StringBuffer sb = new StringBuffer(); - for (;;) { - c = next(); - if (delimiters.indexOf(c) >= 0 || c == 0 || - c == '\n' || c == '\r') { - if (c != 0) { - back(); - } - return sb.toString().trim(); - } - sb.append(c); + } + + + /** + * Get the text up but not including one of the specified delimiter + * characters or the end of line, whichever comes first. + * @param delimiters A set of delimiter characters. + * @return A string, trimmed. + */ + public String nextTo(String delimiters) { + char c; + StringBuffer sb = new StringBuffer(); + for (;;) { + c = this.next(); + if (delimiters.indexOf(c) >= 0 || c == 0 || + c == '\n' || c == '\r') { + if (c != 0) { + this.back(); } + return sb.toString().trim(); + } + sb.append(c); + } + } + + + /** + * Get the next value. The value can be a Boolean, Double, Integer, + * JSONArray, JSONObject, Long, or String, or the JSONObject.NULL object. + * @throws JSONException If syntax error. + * + * @return An object. + */ + public Object nextValue() { + char c = this.nextClean(); + String string; + + switch (c) { + case '"': + case '\'': + return this.nextString(c); + case '{': +// this.back(); +// return new JSONObject(this); + case '[': + this.back(); + return new JSON(this);/*Array(this);*/ } - - /** - * Get the next value. The value can be a Boolean, Double, Integer, - * JSONArray, JSONObject, Long, or String, or the JSONObject.NULL object. - * @throws JSONException If syntax error. + /* + * Handle unquoted text. This could be the values true, false, or + * null, or it can be a number. An implementation (such as this one) + * is allowed to also accept non-standard forms. * - * @return An object. + * Accumulate characters until we reach the end of the text or a + * formatting character. */ - public Object nextValue() throws JSONException { - char c = nextClean(); - String string; - switch (c) { - case '"': - case '\'': - return nextString(c); - case '{': - back(); - return new JSONObject(this); - case '[': - back(); - return new JSONArray(this); - } - - /* - * Handle unquoted text. This could be the values true, false, or - * null, or it can be a number. An implementation (such as this one) - * is allowed to also accept non-standard forms. - * - * Accumulate characters until we reach the end of the text or a - * formatting character. - */ - - StringBuffer sb = new StringBuffer(); - while (c >= ' ' && ",:]}/\\\"[{;=#".indexOf(c) < 0) { - sb.append(c); - c = next(); - } - back(); - - string = sb.toString().trim(); - if (string.equals("")) { - throw syntaxError("Missing value"); - } - return JSONObject.stringToValue(string); + StringBuffer sb = new StringBuffer(); + while (c >= ' ' && ",:]}/\\\"[{;=#".indexOf(c) < 0) { + sb.append(c); + c = this.next(); } + this.back(); - - /** - * Skip characters until the next character is the requested character. - * If the requested character is not found, no characters are skipped. - * @param to A character to skip to. - * @return The requested character, or zero if the requested character - * is not found. - */ - public char skipTo(char to) throws JSONException { - char c; - try { - int startIndex = this.index; - int startCharacter = this.character; - int startLine = this.line; - reader.mark(Integer.MAX_VALUE); - do { - c = next(); - if (c == 0) { - reader.reset(); - this.index = startIndex; - this.character = startCharacter; - this.line = startLine; - return c; - } - } while (c != to); - } catch (IOException exc) { - throw new JSONException(exc); - } - - back(); - return c; + string = sb.toString().trim(); + if ("".equals(string)) { + throw new RuntimeException("Missing value"); } - - - /** - * Make a JSONException to signal a syntax error. - * - * @param message The error message. - * @return A JSONException object, suitable for throwing - */ - public JSONException syntaxError(String message) { - return new JSONException(message + toString()); + return JSONObject.stringToValue(string); + } + + + /** + * Skip characters until the next character is the requested character. + * If the requested character is not found, no characters are skipped. + * @param to A character to skip to. + * @return The requested character, or zero if the requested character + * is not found. + */ + public char skipTo(char to) { + char c; + try { + long startIndex = this.index; + long startCharacter = this.character; + long startLine = this.line; + this.reader.mark(1000000); + do { + c = this.next(); + if (c == 0) { + this.reader.reset(); + this.index = startIndex; + this.character = startCharacter; + this.line = startLine; + return c; + } + } while (c != to); + } catch (IOException exc) { + throw new RuntimeException(exc); } - - /** - * Make a printable string of this JSONTokener. - * - * @return " at {index} [character {character} line {line}]" - */ - public String toString() { - return " at " + index + " [character " + this.character + " line " + - this.line + "]"; - } -} \ No newline at end of file + this.back(); + return c; + } + + + /** + * Make a printable string of this JSONTokener. + * + * @return " at {index} [character {character} line {line}]" + */ + @Override + public String toString() { + return " at " + this.index + " [character " + this.character + " line " + + this.line + "]"; + } +} diff --git a/src/org/json/JSONWriter.java b/src/org/json/JSONWriter.java index bb8c9f12d..f4085ebea 100644 --- a/src/org/json/JSONWriter.java +++ b/src/org/json/JSONWriter.java @@ -78,7 +78,7 @@ public class JSONWriter { /** * The object/array stack. */ - private final JSONObject stack[]; + private final JSONObj stack[]; /** * The stack top index. A value of 0 indicates that the stack is empty. @@ -96,7 +96,7 @@ public class JSONWriter { public JSONWriter(Writer w) { this.comma = false; this.mode = 'i'; - this.stack = new JSONObject[maxdepth]; + this.stack = new JSONObj[maxdepth]; this.top = 0; this.writer = w; } @@ -208,7 +208,7 @@ public JSONWriter key(String string) throws JSONException { if (this.comma) { this.writer.write(','); } - this.writer.write(JSONObject.quote(string)); + this.writer.write(JSONObj.quote(string)); this.writer.write(':'); this.comma = false; this.mode = 'o'; @@ -236,7 +236,7 @@ public JSONWriter object() throws JSONException { } if (this.mode == 'o' || this.mode == 'a') { this.append("{"); - this.push(new JSONObject()); + this.push(new JSONObj()); this.comma = false; return this; } @@ -268,7 +268,7 @@ private void pop(char c) throws JSONException { * @param c The scope to open. * @throws JSONException If nesting is too deep. */ - private void push(JSONObject jo) throws JSONException { + private void push(JSONObj jo) throws JSONException { if (this.top >= maxdepth) { throw new JSONException("Nesting too deep."); } @@ -318,6 +318,6 @@ public JSONWriter value(long l) throws JSONException { * @throws JSONException If the value is out of sequence. */ public JSONWriter value(Object object) throws JSONException { - return this.append(JSONObject.valueToString(object)); + return this.append(JSONObj.valueToString(object)); } } diff --git a/src/org/json/XML.java b/src/org/json/XML.java index e32819159..6162e49b2 100644 --- a/src/org/json/XML.java +++ b/src/org/json/XML.java @@ -127,11 +127,11 @@ public static void noSpace(String string) throws JSONException { * @return true if the close tag is processed. * @throws JSONException */ - private static boolean parse(XMLTokener x, JSONObject context, - String name) throws JSONException { + private static boolean parse(XMLTokener x, JSONObj context, + String name) /*throws JSONException*/ { char c; int i; - JSONObject jsonobject = null; + JSONObj jsonobject = null; String string; String tagName; Object token; @@ -169,13 +169,13 @@ private static boolean parse(XMLTokener x, JSONObject context, return false; } } - throw x.syntaxError("Expected 'CDATA['"); +// throw x.syntaxError("Expected 'CDATA['"); } i = 1; do { token = x.nextMeta(); if (token == null) { - throw x.syntaxError("Missing '>' after '' after ' 0) { context.accumulate(tagName, jsonobject); @@ -256,7 +256,7 @@ private static boolean parse(XMLTokener x, JSONObject context, token = x.nextContent(); if (token == null) { if (tagName != null) { - throw x.syntaxError("Unclosed tag " + tagName); +// throw x.syntaxError("Unclosed tag " + tagName); } return false; } else if (token instanceof String) { @@ -284,10 +284,11 @@ private static boolean parse(XMLTokener x, JSONObject context, } } } else { - throw x.syntaxError("Misshaped tag"); +// throw x.syntaxError("Misshaped tag"); } } } + return false; } @@ -311,7 +312,7 @@ public static Object stringToValue(String string) { return Boolean.FALSE; } if (string.equalsIgnoreCase("null")) { - return JSONObject.NULL; + return JSONObj.NULL; } if (string.equals("0")) { return new Integer(0); @@ -362,8 +363,8 @@ public static Object stringToValue(String string) { * @return A JSONObject containing the structured data from the XML string. * @throws JSONException */ - public static JSONObject toJSONObject(String string) throws JSONException { - JSONObject jo = new JSONObject(); + public static JSONObj toJSONObject(String string) throws JSONException { + JSONObj jo = new JSONObj(); XMLTokener x = new XMLTokener(string); while (x.more() && x.skipPast("<")) { parse(x, jo, null); @@ -394,14 +395,14 @@ public static String toString(Object object, String tagName) throws JSONException { StringBuffer sb = new StringBuffer(); int i; - JSONArray ja; - JSONObject jo; + JSONArr ja; + JSONObj jo; String key; Iterator keys; int length; String string; Object value; - if (object instanceof JSONObject) { + if (object instanceof JSONObj) { // Emit @@ -413,7 +414,7 @@ public static String toString(Object object, String tagName) // Loop thru the keys. - jo = (JSONObject)object; + jo = (JSONObj)object; keys = jo.keys(); while (keys.hasNext()) { key = keys.next().toString(); @@ -430,8 +431,8 @@ public static String toString(Object object, String tagName) // Emit content in body if (key.equals("content")) { - if (value instanceof JSONArray) { - ja = (JSONArray)value; + if (value instanceof JSONArr) { + ja = (JSONArr)value; length = ja.length(); for (i = 0; i < length; i += 1) { if (i > 0) { @@ -445,12 +446,12 @@ public static String toString(Object object, String tagName) // Emit an array of similar keys - } else if (value instanceof JSONArray) { - ja = (JSONArray)value; + } else if (value instanceof JSONArr) { + ja = (JSONArr)value; length = ja.length(); for (i = 0; i < length; i += 1) { value = ja.get(i); - if (value instanceof JSONArray) { + if (value instanceof JSONArr) { sb.append('<'); sb.append(key); sb.append('>'); @@ -488,10 +489,10 @@ public static String toString(Object object, String tagName) } else { if (object.getClass().isArray()) { - object = new JSONArray(object); + object = new JSONArr(object); } - if (object instanceof JSONArray) { - ja = (JSONArray)object; + if (object instanceof JSONArr) { + ja = (JSONArr)object; length = ja.length(); for (i = 0; i < length; i += 1) { sb.append(toString(ja.opt(i), tagName == null ? "array" : tagName)); diff --git a/src/org/json/XMLTokener.java b/src/org/json/XMLTokener.java index c6b6dd7ac..55dfef313 100644 --- a/src/org/json/XMLTokener.java +++ b/src/org/json/XMLTokener.java @@ -60,14 +60,14 @@ public XMLTokener(String s) { * @return The string up to the ]]>. * @throws JSONException If the ]]> is not found. */ - public String nextCDATA() throws JSONException { + public String nextCDATA() /*throws JSONException*/ { char c; int i; StringBuffer sb = new StringBuffer(); for (;;) { c = next(); if (end()) { - throw syntaxError("Unclosed CDATA"); +// throw syntaxError("Unclosed CDATA"); } sb.append(c); i = sb.length() - 3; @@ -89,7 +89,7 @@ public String nextCDATA() throws JSONException { * source text. * @throws JSONException */ - public Object nextContent() throws JSONException { + public Object nextContent() /*throws JSONException*/ { char c; StringBuffer sb; do { @@ -124,7 +124,7 @@ public Object nextContent() throws JSONException { * @return A Character or an entity String if the entity is not recognized. * @throws JSONException If missing ';' in XML entity. */ - public Object nextEntity(char ampersand) throws JSONException { + public Object nextEntity(char ampersand) /*throws JSONException*/ { StringBuffer sb = new StringBuffer(); for (;;) { char c = next(); @@ -133,7 +133,7 @@ public Object nextEntity(char ampersand) throws JSONException { } else if (c == ';') { break; } else { - throw syntaxError("Missing ';' in XML entity: &" + sb); +// throw syntaxError("Missing ';' in XML entity: &" + sb); } } String string = sb.toString(); @@ -151,7 +151,7 @@ public Object nextEntity(char ampersand) throws JSONException { * @throws JSONException If a string is not properly closed or if the XML * is badly structured. */ - public Object nextMeta() throws JSONException { + public Object nextMeta() /*throws JSONException*/ { char c; char q; do { @@ -159,7 +159,7 @@ public Object nextMeta() throws JSONException { } while (Character.isWhitespace(c)); switch (c) { case 0: - throw syntaxError("Misshaped meta tag"); +// throw syntaxError("Misshaped meta tag"); case '<': return XML.LT; case '>': @@ -178,7 +178,7 @@ public Object nextMeta() throws JSONException { for (;;) { c = next(); if (c == 0) { - throw syntaxError("Unterminated string"); +// throw syntaxError("Unterminated string"); } if (c == q) { return Boolean.TRUE; @@ -216,7 +216,7 @@ public Object nextMeta() throws JSONException { * @return a String or a Character. * @throws JSONException If the XML is not well formed. */ - public Object nextToken() throws JSONException { + public Object nextToken() /*throws JSONException*/ { char c; char q; StringBuffer sb; @@ -225,9 +225,9 @@ public Object nextToken() throws JSONException { } while (Character.isWhitespace(c)); switch (c) { case 0: - throw syntaxError("Misshaped element"); +// throw syntaxError("Misshaped element"); case '<': - throw syntaxError("Misplaced '<'"); +// throw syntaxError("Misplaced '<'"); case '>': return XML.GT; case '/': @@ -248,7 +248,7 @@ public Object nextToken() throws JSONException { for (;;) { c = next(); if (c == 0) { - throw syntaxError("Unterminated string"); +// throw syntaxError("Unterminated string"); } if (c == q) { return sb.toString(); @@ -285,7 +285,7 @@ public Object nextToken() throws JSONException { case '<': case '"': case '\'': - throw syntaxError("Bad character in a name"); +// throw syntaxError("Bad character in a name"); } } } @@ -298,7 +298,7 @@ public Object nextToken() throws JSONException { * @param to A string to skip past. * @throws JSONException */ - public boolean skipPast(String to) throws JSONException { + public boolean skipPast(String to) /*throws JSONException*/ { boolean b; char c; int i; From 1d9c03b86575d0cefe0473bd0a57c9a100dcf4c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20G=C3=B6ransson?= Date: Sun, 24 Mar 2013 15:52:59 +0100 Subject: [PATCH 07/26] Alternative API --- .../download/json4processing-0.1.6.zip | Bin 218226 -> 218834 bytes distribution/json4processing-0.1.6/index.html | 2 +- .../reference/allclasses-frame.html | 4 +- .../reference/allclasses-noframe.html | 4 +- .../reference/constant-values.html | 4 +- .../reference/deprecated-list.html | 4 +- .../reference/help-doc.html | 4 +- .../reference/index-all.html | 12 +++- .../reference/index.html | 2 +- .../reference/org/json/CDL.html | 4 +- .../reference/org/json/Cookie.html | 4 +- .../reference/org/json/CookieList.html | 4 +- .../reference/org/json/HTTP.html | 4 +- .../reference/org/json/HTTPTokener.html | 4 +- .../reference/org/json/JSON.JSONType.html | 4 +- .../reference/org/json/JSON.html | 64 +++++++++++++++-- .../reference/org/json/JSONArr.html | 4 +- .../reference/org/json/JSONException.html | 4 +- .../reference/org/json/JSONML.html | 4 +- .../reference/org/json/JSONObj.html | 4 +- .../reference/org/json/JSONString.html | 4 +- .../reference/org/json/JSONStringer.html | 4 +- .../reference/org/json/JSONTokener.html | 4 +- .../reference/org/json/JSONWriter.html | 4 +- .../reference/org/json/XML.html | 4 +- .../reference/org/json/XMLTokener.html | 4 +- .../reference/org/json/package-frame.html | 4 +- .../reference/org/json/package-summary.html | 4 +- .../reference/org/json/package-tree.html | 4 +- .../reference/overview-tree.html | 4 +- .../reference/serialized-form.html | 4 +- src/org/json/JSON.java | 68 ++++++++++++++---- src/org/json/JSONTokener.java | 6 +- 33 files changed, 182 insertions(+), 76 deletions(-) diff --git a/distribution/json4processing-0.1.6/download/json4processing-0.1.6.zip b/distribution/json4processing-0.1.6/download/json4processing-0.1.6.zip index ecde9f0dddba9f25535abdc73f8f4f6b238a82e5..548fb38cf8bbf972e24e7a4ca582609c12be47d1 100644 GIT binary patch delta 146352 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 j2tyoxC6Ke17okf8t=M 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

R(KxYeXTMD=F#f4m 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 PRWtz<@I=Cp(1iLwj7%BB delta 145784 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

J94lh0N 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 diff --git a/distribution/json4processing-0.1.6/index.html b/distribution/json4processing-0.1.6/index.html index 1625d5d72..0afd2bffe 100644 --- a/distribution/json4processing-0.1.6/index.html +++ b/distribution/json4processing-0.1.6/index.html @@ -41,7 +41,7 @@

json4processing

json4processing

- A library by Andreas Goransson for the programming environment processing. Last update, 03/22/2013. + A library by Andreas Goransson for the programming environment processing. Last update, 03/23/2013.

Feel free to replace this paragraph with a description of the library. Contributed libraries are developed, documented, and maintained by members of the Processing community. Further directions are included with each library. For feedback and support, please post to the Discourse. We strongly encourage all libraries to be open source, but not all of them are. diff --git a/distribution/json4processing-0.1.6/reference/allclasses-frame.html b/distribution/json4processing-0.1.6/reference/allclasses-frame.html index c30d384db..1a86b492b 100644 --- a/distribution/json4processing-0.1.6/reference/allclasses-frame.html +++ b/distribution/json4processing-0.1.6/reference/allclasses-frame.html @@ -2,9 +2,9 @@ - + All Classes (Javadocs: json4processing) - + diff --git a/distribution/json4processing-0.1.6/reference/allclasses-noframe.html b/distribution/json4processing-0.1.6/reference/allclasses-noframe.html index 02b38ec6a..9694b6a40 100644 --- a/distribution/json4processing-0.1.6/reference/allclasses-noframe.html +++ b/distribution/json4processing-0.1.6/reference/allclasses-noframe.html @@ -2,9 +2,9 @@ - + All Classes (Javadocs: json4processing) - + diff --git a/distribution/json4processing-0.1.6/reference/constant-values.html b/distribution/json4processing-0.1.6/reference/constant-values.html index ef0211c2f..7d6c2c0cc 100644 --- a/distribution/json4processing-0.1.6/reference/constant-values.html +++ b/distribution/json4processing-0.1.6/reference/constant-values.html @@ -2,9 +2,9 @@ - + Constant Field Values (Javadocs: json4processing) - + diff --git a/distribution/json4processing-0.1.6/reference/deprecated-list.html b/distribution/json4processing-0.1.6/reference/deprecated-list.html index e416351d7..c806cab0e 100644 --- a/distribution/json4processing-0.1.6/reference/deprecated-list.html +++ b/distribution/json4processing-0.1.6/reference/deprecated-list.html @@ -2,9 +2,9 @@ - + Deprecated List (Javadocs: json4processing) - + diff --git a/distribution/json4processing-0.1.6/reference/help-doc.html b/distribution/json4processing-0.1.6/reference/help-doc.html index 0633d6289..6e60bd9b6 100644 --- a/distribution/json4processing-0.1.6/reference/help-doc.html +++ b/distribution/json4processing-0.1.6/reference/help-doc.html @@ -2,9 +2,9 @@ - + API Help (Javadocs: json4processing) - + diff --git a/distribution/json4processing-0.1.6/reference/index-all.html b/distribution/json4processing-0.1.6/reference/index-all.html index 684679dbb..a3ffd9252 100644 --- a/distribution/json4processing-0.1.6/reference/index-all.html +++ b/distribution/json4processing-0.1.6/reference/index-all.html @@ -2,9 +2,9 @@ - + Index (Javadocs: json4processing) - + @@ -81,6 +81,8 @@

A

Append values to the array under a key.
+
arr - Variable in class org.json.JSON
+
 
array() - Method in class org.json.JSONWriter
Begin appending a new array.
@@ -608,6 +610,8 @@

N

O

+
obj - Variable in class org.json.JSON
+
 
object() - Method in class org.json.JSONWriter
Begin appending a new object.
@@ -1010,6 +1014,8 @@

T

Convert a JSONObject into an HTTP header.
+
toString() - Method in class org.json.JSON
+
 
toString() - Method in class org.json.JSONArr
Make a JSON text of this JSONArray.
@@ -1050,6 +1056,8 @@

T

Convert a JSONObject into a well-formed, element-normal XML string.
+
type - Variable in class org.json.JSON
+
 
diff --git a/distribution/json4processing-0.1.6/reference/index.html b/distribution/json4processing-0.1.6/reference/index.html index 67f41f64d..17c01bcc0 100644 --- a/distribution/json4processing-0.1.6/reference/index.html +++ b/distribution/json4processing-0.1.6/reference/index.html @@ -2,7 +2,7 @@ - + Javadocs: json4processing - - - - - - -
-
org.json
-

Enum JSON.JSONType

-
-
-
    -
  • java.lang.Object
  • -
  • -
      -
    • java.lang.Enum<JSON.JSONType>
    • -
    • -
        -
      • org.json.JSON.JSONType
      • -
      -
    • -
    -
  • -
-
-
    -
  • -
    -
    All Implemented Interfaces:
    -
    java.io.Serializable, java.lang.Comparable<JSON.JSONType>
    -
    -
    -
    Enclosing class:
    -
    JSON
    -
    -
    -
    -
    public static enum JSON.JSONType
    -extends java.lang.Enum<JSON.JSONType>
    -
  • -
-
-
-
    -
  • - -
      -
    • - - -

      Enum Constant Summary

      - - - - - - - - - - - - - - -
      Enum Constants 
      Enum Constant and Description
      ARRAY 
      NULL 
      OBJECT 
      -
    • -
    - -
      -
    • - - -

      Method Summary

      - - - - - - - - - - - - - - -
      Methods 
      Modifier and TypeMethod and Description
      static JSON.JSONTypevalueOf(java.lang.String name) -
      Returns the enum constant of this type with the specified name.
      -
      static JSON.JSONType[]values() -
      Returns an array containing the constants of this enum type, in -the order they are declared.
      -
      -
        -
      • - - -

        Methods inherited from class java.lang.Enum

        -compareTo, equals, getDeclaringClass, hashCode, name, ordinal, toString, valueOf
      • -
      -
        -
      • - - -

        Methods inherited from class java.lang.Object

        -getClass, notify, notifyAll, wait, wait, wait
      • -
      -
    • -
    -
  • -
-
-
-
    -
  • - - - -
      -
    • - - -

      Method Detail

      - - - -
        -
      • -

        values

        -
        public static JSON.JSONType[] values()
        -
        Returns an array containing the constants of this enum type, in -the order they are declared. This method may be used to iterate -over the constants as follows: -
        -for (JSON.JSONType c : JSON.JSONType.values())
        -    System.out.println(c);
        -
        -
        Returns:
        an array containing the constants of this enum type, in -the order they are declared
        -
      • -
      - - - -
        -
      • -

        valueOf

        -
        public static JSON.JSONType valueOf(java.lang.String name)
        -
        Returns the enum constant of this type with the specified name. -The string must match exactly an identifier used to declare an -enum constant in this type. (Extraneous whitespace characters are -not permitted.)
        -
        Parameters:
        name - the name of the enum constant to be returned.
        -
        Returns:
        the enum constant with the specified name
        -
        Throws:
        -
        java.lang.IllegalArgumentException - if this enum type has no constant -with the specified name
        -
        java.lang.NullPointerException - if the argument is null
        -
      • -
      -
    • -
    -
  • -
-
-
- - - - - -

processing library json4processing by Andreas Goransson. (c) 2011

- - diff --git a/distribution/json4processing-0.1.6/reference/org/json/JSON.html b/distribution/json4processing-0.1.6/reference/org/json/JSON.html index b18cdfe9e..d2ac55e54 100644 --- a/distribution/json4processing-0.1.6/reference/org/json/JSON.html +++ b/distribution/json4processing-0.1.6/reference/org/json/JSON.html @@ -1,10 +1,10 @@ - + - + JSON (Javadocs: json4processing) - + @@ -35,7 +35,7 @@
+ + + + + +
+ +
+

json4processing

+

+ A library by Andreas Goransson for the programming environment processing. Last update, 11/27/2012. +

+

+ Feel free to replace this paragraph with a description of the library. Contributed libraries are developed, documented, and maintained by members of the Processing community. Further directions are included with each library. For feedback and support, please post to the Discourse. We strongly encourage all libraries to be open source, but not all of them are. +

+
+ + + +
+

Download

+

+ Download json4processing version 0.1.4 in + .zip format. +

+

Installation

+

+ Unzip and put the extracted json4processing folder into the libraries folder of your processing sketches. Reference and examples are included in the json4processing folder. +

+
+ + +
+

Keywords ?

+

Reference. Have a look at the javadoc reference here. a copy of the reference is included in the .zip as well.

+

Source. The source code of json4processing is available at github, and its repository can be browsed here.

+
+ +
+

Examples

+

Find a list of examples in the current distribution of json4processing, or have a look at them by following the links below.

+ +
+ + +
+

Tested

+

+ + Platform linux, windows + + +
Processing 1.5.1 + + +
Dependencies ? +

+
+ + + + + + + + + + + + +
+
+ + +
+ + + + + +
+ +
+

json4processing

+

+ A library by Andreas Goransson for the programming environment processing. Last update, 03/31/2012. +

+

+ Feel free to replace this paragraph with a description of the library. Contributed libraries are developed, documented, and maintained by members of the Processing community. Further directions are included with each library. For feedback and support, please post to the Discourse. We strongly encourage all libraries to be open source, but not all of them are. +

+
+ + + +
+

Download

+

+ Download json4processing version 0.1.3 in + .zip format. +

+

Installation

+

+ Unzip and put the extracted json4processing folder into the libraries folder of your processing sketches. Reference and examples are included in the json4processing folder. +

+
+ + +
+

Keywords ?

+

Reference. Have a look at the javadoc reference here. a copy of the reference is included in the .zip as well.

+

Source. The source code of json4processing is available at github, and its repository can be browsed here.

+
+ +
+

Examples

+

Find a list of examples in the current distribution of json4processing, or have a look at them by following the links below.

+ +
+ + +
+

Tested

+

+ + Platform linux, windows + + +
Processing 1.5.1 + + +
Dependencies ? +

+
+ + + + + + + + + + + + +
+
+ + +