diff --git a/.classpath b/.classpath new file mode 100644 index 000000000..fb5011632 --- /dev/null +++ b/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/.project b/.project new file mode 100644 index 000000000..c539d8f59 --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + JSON-java + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/bin/.gitignore b/bin/.gitignore new file mode 100644 index 000000000..cf1db2eed --- /dev/null +++ b/bin/.gitignore @@ -0,0 +1 @@ +/org/ diff --git a/bin/org/json/CDL.class b/bin/org/json/CDL.class new file mode 100644 index 000000000..5587c47a5 Binary files /dev/null and b/bin/org/json/CDL.class differ diff --git a/bin/org/json/Cookie.class b/bin/org/json/Cookie.class new file mode 100644 index 000000000..d2dbe9ba6 Binary files /dev/null and b/bin/org/json/Cookie.class differ diff --git a/bin/org/json/CookieList.class b/bin/org/json/CookieList.class new file mode 100644 index 000000000..40908aa9d Binary files /dev/null and b/bin/org/json/CookieList.class differ diff --git a/bin/org/json/HTTP.class b/bin/org/json/HTTP.class new file mode 100644 index 000000000..b2c994160 Binary files /dev/null and b/bin/org/json/HTTP.class differ diff --git a/bin/org/json/HTTPTokener.class b/bin/org/json/HTTPTokener.class new file mode 100644 index 000000000..1498ff311 Binary files /dev/null and b/bin/org/json/HTTPTokener.class differ diff --git a/bin/org/json/JSONArray.class b/bin/org/json/JSONArray.class new file mode 100644 index 000000000..dabee8e88 Binary files /dev/null and b/bin/org/json/JSONArray.class differ diff --git a/bin/org/json/JSONException.class b/bin/org/json/JSONException.class new file mode 100644 index 000000000..64948dc8d Binary files /dev/null and b/bin/org/json/JSONException.class differ diff --git a/bin/org/json/JSONML.class b/bin/org/json/JSONML.class new file mode 100644 index 000000000..9a30edbcf Binary files /dev/null and b/bin/org/json/JSONML.class differ diff --git a/bin/org/json/JSONObject$Null.class b/bin/org/json/JSONObject$Null.class new file mode 100644 index 000000000..c608a209b Binary files /dev/null and b/bin/org/json/JSONObject$Null.class differ diff --git a/bin/org/json/JSONObject.class b/bin/org/json/JSONObject.class new file mode 100644 index 000000000..ce7be1210 Binary files /dev/null and b/bin/org/json/JSONObject.class differ diff --git a/bin/org/json/JSONString.class b/bin/org/json/JSONString.class new file mode 100644 index 000000000..41b164a95 Binary files /dev/null and b/bin/org/json/JSONString.class differ diff --git a/bin/org/json/JSONStringer.class b/bin/org/json/JSONStringer.class new file mode 100644 index 000000000..66c7db3c6 Binary files /dev/null and b/bin/org/json/JSONStringer.class differ diff --git a/bin/org/json/JSONTokener.class b/bin/org/json/JSONTokener.class new file mode 100644 index 000000000..02f30b1fd Binary files /dev/null and b/bin/org/json/JSONTokener.class differ diff --git a/bin/org/json/JSONWriter.class b/bin/org/json/JSONWriter.class new file mode 100644 index 000000000..71e06fd6f Binary files /dev/null and b/bin/org/json/JSONWriter.class differ diff --git a/bin/org/json/Property.class b/bin/org/json/Property.class new file mode 100644 index 000000000..a07c92de9 Binary files /dev/null and b/bin/org/json/Property.class differ diff --git a/bin/org/json/XML.class b/bin/org/json/XML.class new file mode 100644 index 000000000..cc1330b9f Binary files /dev/null and b/bin/org/json/XML.class differ diff --git a/bin/org/json/XMLTokener.class b/bin/org/json/XMLTokener.class new file mode 100644 index 000000000..4a5e80694 Binary files /dev/null and b/bin/org/json/XMLTokener.class differ diff --git a/doc/allclasses-frame.html b/doc/allclasses-frame.html new file mode 100644 index 000000000..ac617f2ff --- /dev/null +++ b/doc/allclasses-frame.html @@ -0,0 +1,35 @@ + + + + + +All Classes + + + + + +

All Classes

+
+ +
+ + diff --git a/doc/allclasses-noframe.html b/doc/allclasses-noframe.html new file mode 100644 index 000000000..2fc332ce3 --- /dev/null +++ b/doc/allclasses-noframe.html @@ -0,0 +1,35 @@ + + + + + +All Classes + + + + + +

All Classes

+
+ +
+ + diff --git a/doc/constant-values.html b/doc/constant-values.html new file mode 100644 index 000000000..0374860e3 --- /dev/null +++ b/doc/constant-values.html @@ -0,0 +1,189 @@ + + + + + +Constant Field Values + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Constant Field Values

+

Contents

+ +
+
+ + +

org.json.*

+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/deprecated-list.html b/doc/deprecated-list.html new file mode 100644 index 000000000..97542cfc0 --- /dev/null +++ b/doc/deprecated-list.html @@ -0,0 +1,122 @@ + + + + + +Deprecated List + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Deprecated API

+

Contents

+
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/help-doc.html b/doc/help-doc.html new file mode 100644 index 000000000..33d32c366 --- /dev/null +++ b/doc/help-doc.html @@ -0,0 +1,223 @@ + + + + + +API Help + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

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.
+
+
+ +This help file applies to API documentation generated using the standard doclet.
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/index-files/index-1.html b/doc/index-files/index-1.html new file mode 100644 index 000000000..95b310e87 --- /dev/null +++ b/doc/index-files/index-1.html @@ -0,0 +1,149 @@ + + + + + +A-Index + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
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.
+
+
append(String) - Method in class org.json.JSONWriter
+
+
Append a value.
+
+
array() - Method in class org.json.JSONWriter
+
+
Begin appending a new array.
+
+
+A B C D E G H I J K L M N O P Q R S T U V W X 
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/index-files/index-10.html b/doc/index-files/index-10.html new file mode 100644 index 000000000..e86e378fc --- /dev/null +++ b/doc/index-files/index-10.html @@ -0,0 +1,137 @@ + + + + + +K-Index + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
A B C D E G H I J K L M N O P Q R S T U V W X  + + +

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.
+
+
keySet() - Method in class org.json.JSONObject
+
+
Get a set of keys of the JSONObject.
+
+
+A B C D E G H I J K L M N O P Q R S T U V W X 
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/index-files/index-11.html b/doc/index-files/index-11.html new file mode 100644 index 000000000..8b255a960 --- /dev/null +++ b/doc/index-files/index-11.html @@ -0,0 +1,139 @@ + + + + + +L-Index + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
A B C D E G H I J K L M N O P Q R S T U V W X  + + +

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.
+
+
line - Variable in class org.json.JSONTokener
+
 
+
LT - Static variable in class org.json.XML
+
+
The Character '<'.
+
+
+A B C D E G H I J K L M N O P Q R S T U V W X 
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/index-files/index-12.html b/doc/index-files/index-12.html new file mode 100644 index 000000000..cbe472d63 --- /dev/null +++ b/doc/index-files/index-12.html @@ -0,0 +1,144 @@ + + + + + +M-Index + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
A B C D E G H I J K L M N O P Q R S T U V W X  + + +

M

+
+
map - Variable in class org.json.JSONObject
+
+
The map where the JSONObject's properties are kept.
+
+
maxdepth - Static variable in class org.json.JSONWriter
+
 
+
mode - Variable in class org.json.JSONWriter
+
+
The current mode.
+
+
more() - Method in class org.json.JSONTokener
+
+
Determine if the source string still contains characters that next() + can consume.
+
+
myArrayList - Variable in class org.json.JSONArray
+
+
The arrayList where the JSONArray's properties are kept.
+
+
+A B C D E G H I J K L M N O P Q R S T U V W X 
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/index-files/index-13.html b/doc/index-files/index-13.html new file mode 100644 index 000000000..18a6c507b --- /dev/null +++ b/doc/index-files/index-13.html @@ -0,0 +1,204 @@ + + + + + +N-Index + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
A B C D E G H I J K L M N O P Q R S T U V W X  + + +

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.
+
+
Null() - Constructor for class org.json.JSONObject.Null
+
 
+
numberToString(Number) - Static method in class org.json.JSONObject
+
+
Produce a string from a Number.
+
+
+A B C D E G H I J K L M N O P Q R S T U V W X 
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/index-files/index-14.html b/doc/index-files/index-14.html new file mode 100644 index 000000000..28385f1d6 --- /dev/null +++ b/doc/index-files/index-14.html @@ -0,0 +1,275 @@ + + + + + +O-Index + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
A B C D E G H I J K L M N O P Q R S T U V W X  + + +

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.
+
+
optBigDecimal(int, BigDecimal) - Method in class org.json.JSONArray
+
+
Get the optional BigDecimal value associated with an index.
+
+
optBigDecimal(String, BigDecimal) - Method in class org.json.JSONObject
+
+
Get an optional BigDecimal associated with a key, or the defaultValue if + there is no such key or if its value is not a number.
+
+
optBigInteger(int, BigInteger) - Method in class org.json.JSONArray
+
+
Get the optional BigInteger value associated with an index.
+
+
optBigInteger(String, BigInteger) - Method in class org.json.JSONObject
+
+
Get an optional BigInteger associated with a key, or the defaultValue if + there is no such key or if its value is not a number.
+
+
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.
+
+
optEnum(Class<E>, int) - Method in class org.json.JSONArray
+
+
Get the enum value associated with a key.
+
+
optEnum(Class<E>, int, E) - Method in class org.json.JSONArray
+
+
Get the enum value associated with a key.
+
+
optEnum(Class<E>, String) - Method in class org.json.JSONObject
+
+
Get the enum value associated with a key.
+
+
optEnum(Class<E>, String, E) - Method in class org.json.JSONObject
+
+
Get the enum value associated with a key.
+
+
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
+
 
+
+A B C D E G H I J K L M N O P Q R S T U V W X 
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/index-files/index-15.html b/doc/index-files/index-15.html new file mode 100644 index 000000000..7a01e11f9 --- /dev/null +++ b/doc/index-files/index-15.html @@ -0,0 +1,252 @@ + + + + + +P-Index + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
A B C D E G H I J K L M N O P Q R S T U V W X  + + +

P

+
+
parse(XMLTokener, boolean, JSONArray) - Static method in class org.json.JSONML
+
+
Parse XML values and store them in a JSONArray.
+
+
parse(XMLTokener, JSONObject, String) - Static method in class org.json.XML
+
+
Scan the content following the named tag, attaching it to the context.
+
+
pop(char) - Method in class org.json.JSONWriter
+
+
Pop an array or object scope.
+
+
populateMap(Object) - Method in class org.json.JSONObject
+
 
+
previous - Variable in class org.json.JSONTokener
+
 
+
Property - Class in org.json
+
+
Converts a Property file data into JSONObject and back.
+
+
Property() - Constructor for class org.json.Property
+
 
+
push(JSONObject) - Method in class org.json.JSONWriter
+
+
Push an array or object scope.
+
+
put(boolean) - Method in class org.json.JSONArray
+
+
Append a boolean value.
+
+
put(Collection<Object>) - 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<String, Object>) - 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<Object>) - 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<String, Object>) - 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<Object>) - 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<String, Object>) - 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.
+
+
+A B C D E G H I J K L M N O P Q R S T U V W X 
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/index-files/index-16.html b/doc/index-files/index-16.html new file mode 100644 index 000000000..33ac5e4f2 --- /dev/null +++ b/doc/index-files/index-16.html @@ -0,0 +1,140 @@ + + + + + +Q-Index + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
A B C D E G H I J K L M N O P Q R S T U V W X  + + +

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.
+
+
quote(String, Writer) - Static method in class org.json.JSONObject
+
 
+
+A B C D E G H I J K L M N O P Q R S T U V W X 
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/index-files/index-17.html b/doc/index-files/index-17.html new file mode 100644 index 000000000..229ea4af9 --- /dev/null +++ b/doc/index-files/index-17.html @@ -0,0 +1,148 @@ + + + + + +R-Index + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
A B C D E G H I J K L M N O P Q R S T U V W X  + + +

R

+
+
reader - Variable in class org.json.JSONTokener
+
 
+
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.
+
+
+A B C D E G H I J K L M N O P Q R S T U V W X 
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/index-files/index-18.html b/doc/index-files/index-18.html new file mode 100644 index 000000000..7238e2753 --- /dev/null +++ b/doc/index-files/index-18.html @@ -0,0 +1,163 @@ + + + + + +S-Index + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
A B C D E G H I J K L M N O P Q R S T U V W X  + + +

S

+
+
serialVersionUID - Static variable in exception org.json.JSONException
+
 
+
similar(Object) - Method in class org.json.JSONArray
+
+
Determine if two JSONArrays are similar.
+
+
similar(Object) - Method in class org.json.JSONObject
+
+
Determine if two JSONObjects are similar.
+
+
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 '/'.
+
+
stack - Variable in class org.json.JSONWriter
+
+
The object/array stack.
+
+
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.
+
+
+A B C D E G H I J K L M N O P Q R S T U V W X 
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/index-files/index-19.html b/doc/index-files/index-19.html new file mode 100644 index 000000000..eebe388d5 --- /dev/null +++ b/doc/index-files/index-19.html @@ -0,0 +1,278 @@ + + + + + +T-Index + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
A B C D E G H I J K L M N O P Q R S T U V W X  + + +

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(Properties) - Static method in class org.json.Property
+
+
Converts a property file object into a JSONObject.
+
+
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.
+
+
top - Variable in class org.json.JSONWriter
+
+
The stack top index.
+
+
toProperties(JSONObject) - Static method in class org.json.Property
+
+
Converts the JSONObject into a property file object.
+
+
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.Null
+
+
Get the "null" string value.
+
+
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.
+
+
+A B C D E G H I J K L M N O P Q R S T U V W X 
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/index-files/index-2.html b/doc/index-files/index-2.html new file mode 100644 index 000000000..f6beefe76 --- /dev/null +++ b/doc/index-files/index-2.html @@ -0,0 +1,133 @@ + + + + + +B-Index + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
A B C D E G H I J K L M N O P Q R S T U V W X  + + +

B

+
+
back() - Method in class org.json.JSONTokener
+
+
Back up one character.
+
+
BANG - Static variable in class org.json.XML
+
+
The Character '!'.
+
+
+A B C D E G H I J K L M N O P Q R S T U V W X 
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/index-files/index-20.html b/doc/index-files/index-20.html new file mode 100644 index 000000000..dd3a498b6 --- /dev/null +++ b/doc/index-files/index-20.html @@ -0,0 +1,132 @@ + + + + + +U-Index + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
A B C D E G H I J K L M N O P Q R S T U V W X  + + +

U

+
+
unescape(String) - Static method in class org.json.Cookie
+
+
Convert %hh sequences to single characters, and + convert plus to space.
+
+
usePrevious - Variable in class org.json.JSONTokener
+
 
+
+A B C D E G H I J K L M N O P Q R S T U V W X 
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/index-files/index-21.html b/doc/index-files/index-21.html new file mode 100644 index 000000000..3207f5020 --- /dev/null +++ b/doc/index-files/index-21.html @@ -0,0 +1,146 @@ + + + + + +V-Index + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
A B C D E G H I J K L M N O P Q R S T U V W X  + + +

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.
+
+
+A B C D E G H I J K L M N O P Q R S T U V W X 
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/index-files/index-22.html b/doc/index-files/index-22.html new file mode 100644 index 000000000..b0ecb0a14 --- /dev/null +++ b/doc/index-files/index-22.html @@ -0,0 +1,151 @@ + + + + + +W-Index + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
A B C D E G H I J K L M N O P Q R S T U V W X  + + +

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, int, int) - 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.
+
+
write(Writer, int, int) - Method in class org.json.JSONObject
+
+
Write the contents of the JSONObject as JSON text to a writer.
+
+
writer - Variable in class org.json.JSONWriter
+
+
The writer that will receive the output.
+
+
writeValue(Writer, Object, int, int) - Static method in class org.json.JSONObject
+
 
+
+A B C D E G H I J K L M N O P Q R S T U V W X 
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/index-files/index-23.html b/doc/index-files/index-23.html new file mode 100644 index 000000000..849b5f9c1 --- /dev/null +++ b/doc/index-files/index-23.html @@ -0,0 +1,141 @@ + + + + + +X-Index + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
A B C D E G H I J K L M N O P Q R S T U V W X  + + +

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 
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/index-files/index-3.html b/doc/index-files/index-3.html new file mode 100644 index 000000000..ebfb99a6a --- /dev/null +++ b/doc/index-files/index-3.html @@ -0,0 +1,162 @@ + + + + + +C-Index + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
A B C D E G H I J K L M N O P Q R S T U V W X  + + +

C

+
+
cause - Variable in exception org.json.JSONException
+
 
+
CDL - Class in org.json
+
+
This provides static methods to convert comma delimited text into a + JSONArray, and to convert a JSONArray into comma delimited text.
+
+
CDL() - Constructor for class org.json.CDL
+
 
+
character - Variable in class org.json.JSONTokener
+
 
+
clone() - Method in class org.json.JSONObject.Null
+
+
There is only intended to be a single instance of the NULL object, + so the clone method returns itself.
+
+
comma - Variable in class org.json.JSONWriter
+
+
The comma flag determines if a comma should be output before the next + value.
+
+
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.
+
+
+A B C D E G H I J K L M N O P Q R S T U V W X 
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/index-files/index-4.html b/doc/index-files/index-4.html new file mode 100644 index 000000000..af4a21ea5 --- /dev/null +++ b/doc/index-files/index-4.html @@ -0,0 +1,133 @@ + + + + + +D-Index + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
A B C D E G H I J K L M N O P Q R S T U V W X  + + +

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.
+
+
+A B C D E G H I J K L M N O P Q R S T U V W X 
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/index-files/index-5.html b/doc/index-files/index-5.html new file mode 100644 index 000000000..54337b90e --- /dev/null +++ b/doc/index-files/index-5.html @@ -0,0 +1,168 @@ + + + + + +E-Index + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
A B C D E G H I J K L M N O P Q R S T U V W X  + + +

E

+
+
end() - Method in class org.json.JSONTokener
+
 
+
end(char, char) - Method in class org.json.JSONWriter
+
+
End something.
+
+
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.
+
+
eof - Variable in class org.json.JSONTokener
+
 
+
EQ - Static variable in class org.json.XML
+
+
The Character '='.
+
+
equals(Object) - Method in class org.json.JSONObject.Null
+
+
A Null object is equal to the null value and to itself.
+
+
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; +
+
+
+A B C D E G H I J K L M N O P Q R S T U V W X 
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/index-files/index-6.html b/doc/index-files/index-6.html new file mode 100644 index 000000000..99999fa1c --- /dev/null +++ b/doc/index-files/index-6.html @@ -0,0 +1,262 @@ + + + + + +G-Index + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
A B C D E G H I J K L M N O P Q R S T U V W X  + + +

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.
+
+
getBigDecimal(int) - Method in class org.json.JSONArray
+
+
Get the BigDecimal value associated with an index.
+
+
getBigDecimal(String) - Method in class org.json.JSONObject
+
+
Get the BigDecimal value associated with a key.
+
+
getBigDecimalSafe(String, BigDecimal) - Method in class org.json.JSONObject
+
+
Get the BigDecimal value associated with a key.
+
+
getBigInteger(int) - Method in class org.json.JSONArray
+
+
Get the BigInteger value associated with an index.
+
+
getBigInteger(String) - Method in class org.json.JSONObject
+
+
Get the BigInteger value associated with a key.
+
+
getBigIntegerSafe(String, BigInteger) - Method in class org.json.JSONObject
+
+
Get the BigInteger value associated with a key.
+
+
getBigIntegerSafe(String, long) - Method in class org.json.JSONObject
+
+
Get the long value 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.
+
+
getBooleanSafe(String, boolean) - Method in class org.json.JSONObject
+
+
Get the boolean associated with a key.
+
+
getCause() - Method in exception org.json.JSONException
+
+
Returns the cause of this exception or null if the cause is nonexistent + or unknown.
+
+
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.
+
+
getDoubleSafe(String, double) - Method in class org.json.JSONObject
+
+
Get the double value associated with a key.
+
+
getEnum(Class<E>, int) - Method in class org.json.JSONArray
+
+
Get the enum value associated with an index.
+
+
getEnum(Class<E>, String) - Method in class org.json.JSONObject
+
+
Get the enum 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.
+
+
getIntSafe(String, int) - 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.
+
+
getStringSafe(String, String) - Method in class org.json.JSONObject
+
+
Get the string associated with a key.
+
+
getValue(JSONTokener) - Static method in class org.json.CDL
+
+
Get the next value.
+
+
GT - Static variable in class org.json.XML
+
+
The Character '>'.
+
+
+A B C D E G H I J K L M N O P Q R S T U V W X 
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/index-files/index-7.html b/doc/index-files/index-7.html new file mode 100644 index 000000000..4e76c5643 --- /dev/null +++ b/doc/index-files/index-7.html @@ -0,0 +1,144 @@ + + + + + +H-Index + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
A B C D E G H I J K L M N O P Q R S T U V W X  + + +

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.
+
+
+A B C D E G H I J K L M N O P Q R S T U V W X 
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/index-files/index-8.html b/doc/index-files/index-8.html new file mode 100644 index 000000000..4941a21c2 --- /dev/null +++ b/doc/index-files/index-8.html @@ -0,0 +1,144 @@ + + + + + +I-Index + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
A B C D E G H I J K L M N O P Q R S T U V W X  + + +

I

+
+
increment(String) - Method in class org.json.JSONObject
+
+
Increment a property of a JSONObject.
+
+
indent(Writer, int) - Static method in class org.json.JSONObject
+
 
+
index - Variable in class org.json.JSONTokener
+
 
+
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.
+
+
iterator() - Method in class org.json.JSONArray
+
 
+
+A B C D E G H I J K L M N O P Q R S T U V W X 
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/index-files/index-9.html b/doc/index-files/index-9.html new file mode 100644 index 000000000..159f7343a --- /dev/null +++ b/doc/index-files/index-9.html @@ -0,0 +1,256 @@ + + + + + +J-Index + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
A B C D E G H I J K L M N O P Q R S T U V W X  + + +

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<Object>) - 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
+
+
Constructs a new JSONException with the specified cause.
+
+
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<String, Object>) - 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.
+
+
JSONObject.Null - Class in org.json
+
+
JSONObject.NULL is equivalent to the value that JavaScript calls null, + whilst Java's null is equivalent to the value that JavaScript calls + undefined.
+
+
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.
+
+
+A B C D E G H I J K L M N O P Q R S T U V W X 
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/index.html b/doc/index.html new file mode 100644 index 000000000..4314a226f --- /dev/null +++ b/doc/index.html @@ -0,0 +1,71 @@ + + + + + +Generated Documentation (Untitled) + + + + + + +<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/doc/org/json/CDL.html b/doc/org/json/CDL.html new file mode 100644 index 000000000..a68436da7 --- /dev/null +++ b/doc/org/json/CDL.html @@ -0,0 +1,556 @@ + + + + + +CDL + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
org.json
+

Class CDL

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/Cookie.html b/doc/org/json/Cookie.html new file mode 100644 index 000000000..d8b6f1310 --- /dev/null +++ b/doc/org/json/Cookie.html @@ -0,0 +1,383 @@ + + + + + +Cookie + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
org.json
+

Class Cookie

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/CookieList.html b/doc/org/json/CookieList.html new file mode 100644 index 000000000..d34f5297b --- /dev/null +++ b/doc/org/json/CookieList.html @@ -0,0 +1,323 @@ + + + + + +CookieList + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
org.json
+

Class CookieList

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/HTTP.html b/doc/org/json/HTTP.html new file mode 100644 index 000000000..85a5ddfca --- /dev/null +++ b/doc/org/json/HTTP.html @@ -0,0 +1,396 @@ + + + + + +HTTP + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
org.json
+

Class HTTP

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/HTTPTokener.html b/doc/org/json/HTTPTokener.html new file mode 100644 index 000000000..12bd680bd --- /dev/null +++ b/doc/org/json/HTTPTokener.html @@ -0,0 +1,306 @@ + + + + + +HTTPTokener + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
org.json
+

Class HTTPTokener

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/JSONArray.html b/doc/org/json/JSONArray.html new file mode 100644 index 000000000..60e4e5e5f --- /dev/null +++ b/doc/org/json/JSONArray.html @@ -0,0 +1,1814 @@ + + + + + +JSONArray + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
org.json
+

Class JSONArray

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/JSONException.html b/doc/org/json/JSONException.html new file mode 100644 index 000000000..23b63442e --- /dev/null +++ b/doc/org/json/JSONException.html @@ -0,0 +1,395 @@ + + + + + +JSONException + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
org.json
+

Class JSONException

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/JSONML.html b/doc/org/json/JSONML.html new file mode 100644 index 000000000..b1d341bfa --- /dev/null +++ b/doc/org/json/JSONML.html @@ -0,0 +1,480 @@ + + + + + +JSONML + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
org.json
+

Class JSONML

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/JSONObject.Null.html b/doc/org/json/JSONObject.Null.html new file mode 100644 index 000000000..6d5982c8c --- /dev/null +++ b/doc/org/json/JSONObject.Null.html @@ -0,0 +1,336 @@ + + + + + +JSONObject.Null + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
org.json
+

Class JSONObject.Null

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/JSONObject.html b/doc/org/json/JSONObject.html new file mode 100644 index 000000000..5d66a944a --- /dev/null +++ b/doc/org/json/JSONObject.html @@ -0,0 +1,2470 @@ + + + + + +JSONObject + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
org.json
+

Class JSONObject

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/JSONString.html b/doc/org/json/JSONString.html new file mode 100644 index 000000000..39a48d3e8 --- /dev/null +++ b/doc/org/json/JSONString.html @@ -0,0 +1,234 @@ + + + + + +JSONString + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
org.json
+

Interface JSONString

+
+
+
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/JSONStringer.html b/doc/org/json/JSONStringer.html new file mode 100644 index 000000000..54c3d221e --- /dev/null +++ b/doc/org/json/JSONStringer.html @@ -0,0 +1,344 @@ + + + + + +JSONStringer + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
org.json
+

Class JSONStringer

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/JSONTokener.html b/doc/org/json/JSONTokener.html new file mode 100644 index 000000000..338caa92a --- /dev/null +++ b/doc/org/json/JSONTokener.html @@ -0,0 +1,793 @@ + + + + + +JSONTokener + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
org.json
+

Class JSONTokener

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/JSONWriter.html b/doc/org/json/JSONWriter.html new file mode 100644 index 000000000..93c708b6f --- /dev/null +++ b/doc/org/json/JSONWriter.html @@ -0,0 +1,752 @@ + + + + + +JSONWriter + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
org.json
+

Class JSONWriter

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/Property.html b/doc/org/json/Property.html new file mode 100644 index 000000000..e94d91375 --- /dev/null +++ b/doc/org/json/Property.html @@ -0,0 +1,313 @@ + + + + + +Property + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
org.json
+

Class Property

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/XML.html b/doc/org/json/XML.html new file mode 100644 index 000000000..0c50cb941 --- /dev/null +++ b/doc/org/json/XML.html @@ -0,0 +1,633 @@ + + + + + +XML + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
org.json
+

Class XML

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/XMLTokener.html b/doc/org/json/XMLTokener.html new file mode 100644 index 000000000..99622209d --- /dev/null +++ b/doc/org/json/XMLTokener.html @@ -0,0 +1,475 @@ + + + + + +XMLTokener + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
org.json
+

Class XMLTokener

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/class-use/CDL.html b/doc/org/json/class-use/CDL.html new file mode 100644 index 000000000..3793a81e7 --- /dev/null +++ b/doc/org/json/class-use/CDL.html @@ -0,0 +1,122 @@ + + + + + +Uses of Class org.json.CDL + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
org.json.CDL

+
+
No usage of org.json.CDL
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/class-use/Cookie.html b/doc/org/json/class-use/Cookie.html new file mode 100644 index 000000000..808b07d76 --- /dev/null +++ b/doc/org/json/class-use/Cookie.html @@ -0,0 +1,122 @@ + + + + + +Uses of Class org.json.Cookie + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
org.json.Cookie

+
+
No usage of org.json.Cookie
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/class-use/CookieList.html b/doc/org/json/class-use/CookieList.html new file mode 100644 index 000000000..278da3120 --- /dev/null +++ b/doc/org/json/class-use/CookieList.html @@ -0,0 +1,122 @@ + + + + + +Uses of Class org.json.CookieList + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
org.json.CookieList

+
+
No usage of org.json.CookieList
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/class-use/HTTP.html b/doc/org/json/class-use/HTTP.html new file mode 100644 index 000000000..2808b6dd4 --- /dev/null +++ b/doc/org/json/class-use/HTTP.html @@ -0,0 +1,122 @@ + + + + + +Uses of Class org.json.HTTP + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
org.json.HTTP

+
+
No usage of org.json.HTTP
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/class-use/HTTPTokener.html b/doc/org/json/class-use/HTTPTokener.html new file mode 100644 index 000000000..0c9f62a83 --- /dev/null +++ b/doc/org/json/class-use/HTTPTokener.html @@ -0,0 +1,122 @@ + + + + + +Uses of Class org.json.HTTPTokener + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
org.json.HTTPTokener

+
+
No usage of org.json.HTTPTokener
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/class-use/JSONArray.html b/doc/org/json/class-use/JSONArray.html new file mode 100644 index 000000000..4d5cd7adb --- /dev/null +++ b/doc/org/json/class-use/JSONArray.html @@ -0,0 +1,407 @@ + + + + + +Uses of Class org.json.JSONArray + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
org.json.JSONArray

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/class-use/JSONException.html b/doc/org/json/class-use/JSONException.html new file mode 100644 index 000000000..252e47ddb --- /dev/null +++ b/doc/org/json/class-use/JSONException.html @@ -0,0 +1,952 @@ + + + + + +Uses of Class org.json.JSONException + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
org.json.JSONException

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/class-use/JSONML.html b/doc/org/json/class-use/JSONML.html new file mode 100644 index 000000000..d1a784c23 --- /dev/null +++ b/doc/org/json/class-use/JSONML.html @@ -0,0 +1,122 @@ + + + + + +Uses of Class org.json.JSONML + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
org.json.JSONML

+
+
No usage of org.json.JSONML
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/class-use/JSONObject.Null.html b/doc/org/json/class-use/JSONObject.Null.html new file mode 100644 index 000000000..1b7019827 --- /dev/null +++ b/doc/org/json/class-use/JSONObject.Null.html @@ -0,0 +1,122 @@ + + + + + +Uses of Class org.json.JSONObject.Null + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
org.json.JSONObject.Null

+
+
No usage of org.json.JSONObject.Null
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/class-use/JSONObject.html b/doc/org/json/class-use/JSONObject.html new file mode 100644 index 000000000..645a1634b --- /dev/null +++ b/doc/org/json/class-use/JSONObject.html @@ -0,0 +1,403 @@ + + + + + +Uses of Class org.json.JSONObject + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
org.json.JSONObject

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/class-use/JSONString.html b/doc/org/json/class-use/JSONString.html new file mode 100644 index 000000000..a4b939aea --- /dev/null +++ b/doc/org/json/class-use/JSONString.html @@ -0,0 +1,122 @@ + + + + + +Uses of Interface org.json.JSONString + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Interface
org.json.JSONString

+
+
No usage of org.json.JSONString
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/class-use/JSONStringer.html b/doc/org/json/class-use/JSONStringer.html new file mode 100644 index 000000000..8c66eb972 --- /dev/null +++ b/doc/org/json/class-use/JSONStringer.html @@ -0,0 +1,122 @@ + + + + + +Uses of Class org.json.JSONStringer + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
org.json.JSONStringer

+
+
No usage of org.json.JSONStringer
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/class-use/JSONTokener.html b/doc/org/json/class-use/JSONTokener.html new file mode 100644 index 000000000..a5721c776 --- /dev/null +++ b/doc/org/json/class-use/JSONTokener.html @@ -0,0 +1,219 @@ + + + + + +Uses of Class org.json.JSONTokener + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
org.json.JSONTokener

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/class-use/JSONWriter.html b/doc/org/json/class-use/JSONWriter.html new file mode 100644 index 000000000..c9c40b17d --- /dev/null +++ b/doc/org/json/class-use/JSONWriter.html @@ -0,0 +1,226 @@ + + + + + +Uses of Class org.json.JSONWriter + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
org.json.JSONWriter

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/class-use/Property.html b/doc/org/json/class-use/Property.html new file mode 100644 index 000000000..5395dfdf5 --- /dev/null +++ b/doc/org/json/class-use/Property.html @@ -0,0 +1,122 @@ + + + + + +Uses of Class org.json.Property + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
org.json.Property

+
+
No usage of org.json.Property
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/class-use/XML.html b/doc/org/json/class-use/XML.html new file mode 100644 index 000000000..91632a669 --- /dev/null +++ b/doc/org/json/class-use/XML.html @@ -0,0 +1,122 @@ + + + + + +Uses of Class org.json.XML + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
org.json.XML

+
+
No usage of org.json.XML
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/class-use/XMLTokener.html b/doc/org/json/class-use/XMLTokener.html new file mode 100644 index 000000000..d729523af --- /dev/null +++ b/doc/org/json/class-use/XMLTokener.html @@ -0,0 +1,173 @@ + + + + + +Uses of Class org.json.XMLTokener + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
org.json.XMLTokener

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/package-frame.html b/doc/org/json/package-frame.html new file mode 100644 index 000000000..a08d04969 --- /dev/null +++ b/doc/org/json/package-frame.html @@ -0,0 +1,42 @@ + + + + + +org.json + + + + + +

org.json

+
+

Interfaces

+ +

Classes

+ +

Exceptions

+ +
+ + diff --git a/doc/org/json/package-summary.html b/doc/org/json/package-summary.html new file mode 100644 index 000000000..55edf765b --- /dev/null +++ b/doc/org/json/package-summary.html @@ -0,0 +1,272 @@ + + + + + +org.json + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Package org.json

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/package-tree.html b/doc/org/json/package-tree.html new file mode 100644 index 000000000..93de16b05 --- /dev/null +++ b/doc/org/json/package-tree.html @@ -0,0 +1,168 @@ + + + + + +org.json Class Hierarchy + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Hierarchy For Package org.json

+
+
+

Class Hierarchy

+ +

Interface Hierarchy

+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/org/json/package-use.html b/doc/org/json/package-use.html new file mode 100644 index 000000000..57e97a659 --- /dev/null +++ b/doc/org/json/package-use.html @@ -0,0 +1,169 @@ + + + + + +Uses of Package org.json + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Package
org.json

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/overview-tree.html b/doc/overview-tree.html new file mode 100644 index 000000000..a46355b68 --- /dev/null +++ b/doc/overview-tree.html @@ -0,0 +1,172 @@ + + + + + +Class Hierarchy + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Hierarchy For All Packages

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +

Interface Hierarchy

+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/package-list b/doc/package-list new file mode 100644 index 000000000..ccf841806 --- /dev/null +++ b/doc/package-list @@ -0,0 +1 @@ +org.json diff --git a/doc/script.js b/doc/script.js new file mode 100644 index 000000000..c3a1cae44 --- /dev/null +++ b/doc/script.js @@ -0,0 +1,30 @@ +function show(type) +{ + count = 0; + for (var key in methods) { + var row = document.getElementById(key); + if ((methods[key] & type) != 0) { + row.style.display = ''; + row.className = (count++ % 2) ? rowColor : altColor; + } + else + row.style.display = 'none'; + } + updateTabs(type); +} + +function updateTabs(type) +{ + for (var value in tabs) { + var sNode = document.getElementById(tabs[value][0]); + var spanNode = sNode.firstChild; + if (value == type) { + sNode.className = activeTableTab; + spanNode.innerHTML = tabs[value][1]; + } + else { + sNode.className = tableTab; + spanNode.innerHTML = "" + tabs[value][1] + ""; + } + } +} diff --git a/doc/serialized-form.html b/doc/serialized-form.html new file mode 100644 index 000000000..35223c8cf --- /dev/null +++ b/doc/serialized-form.html @@ -0,0 +1,150 @@ + + + + + +Serialized Form + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Serialized Form

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/doc/stylesheet.css b/doc/stylesheet.css new file mode 100644 index 000000000..1e392db48 --- /dev/null +++ b/doc/stylesheet.css @@ -0,0 +1,574 @@ +/* Javadoc style sheet */ +/* +Overall document style +*/ + +@import url('resources/fonts/dejavu.css'); + +body { + background-color:#ffffff; + color:#353833; + font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size:14px; + margin:0; +} +a:link, a:visited { + text-decoration:none; + color:#4A6782; +} +a:hover, a:focus { + text-decoration:none; + color:#bb7a2a; +} +a:active { + text-decoration:none; + color:#4A6782; +} +a[name] { + color:#353833; +} +a[name]:hover { + text-decoration:none; + color:#353833; +} +pre { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; +} +h1 { + font-size:20px; +} +h2 { + font-size:18px; +} +h3 { + font-size:16px; + font-style:italic; +} +h4 { + font-size:13px; +} +h5 { + font-size:12px; +} +h6 { + font-size:11px; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; +} +table tr td dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} +/* +Document title and Copyright styles +*/ +.clear { + clear:both; + height:0px; + overflow:hidden; +} +.aboutLanguage { + float:right; + padding:0px 21px; + font-size:11px; + z-index:200; + margin-top:-9px; +} +.legalCopy { + margin-left:.5em; +} +.bar a, .bar a:link, .bar a:visited, .bar a:active { + color:#FFFFFF; + text-decoration:none; +} +.bar a:hover, .bar a:focus { + color:#bb7a2a; +} +.tab { + background-color:#0066FF; + color:#ffffff; + padding:8px; + width:5em; + font-weight:bold; +} +/* +Navigation bar styles +*/ +.bar { + background-color:#4D7A97; + color:#FFFFFF; + padding:.8em .5em .4em .8em; + height:auto;/*height:1.8em;*/ + font-size:11px; + margin:0; +} +.topNav { + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.bottomNav { + margin-top:10px; + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.subNav { + background-color:#dee3e9; + float:left; + width:100%; + overflow:hidden; + font-size:12px; +} +.subNav div { + clear:left; + float:left; + padding:0 0 5px 6px; + text-transform:uppercase; +} +ul.navList, ul.subNavList { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.navList li{ + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +ul.subNavList li{ + list-style:none; + float:left; +} +.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { + color:#FFFFFF; + text-decoration:none; + text-transform:uppercase; +} +.topNav a:hover, .bottomNav a:hover { + text-decoration:none; + color:#bb7a2a; + text-transform:uppercase; +} +.navBarCell1Rev { + background-color:#F8981D; + color:#253441; + margin: auto 5px; +} +.skipNav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* +Page header and footer styles +*/ +.header, .footer { + clear:both; + margin:0 20px; + padding:5px 0 0 0; +} +.indexHeader { + margin:10px; + position:relative; +} +.indexHeader span{ + margin-right:15px; +} +.indexHeader h1 { + font-size:13px; +} +.title { + color:#2c4557; + margin:10px 0; +} +.subTitle { + margin:5px 0 0 0; +} +.header ul { + margin:0 0 15px 0; + padding:0; +} +.footer ul { + margin:20px 0 5px 0; +} +.header ul li, .footer ul li { + list-style:none; + font-size:13px; +} +/* +Heading styles +*/ +div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList li.blockList h3 { + padding:0; + margin:15px 0; +} +ul.blockList li.blockList h2 { + padding:0px 0 20px 0; +} +/* +Page layout container styles +*/ +.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer { + clear:both; + padding:10px 20px; + position:relative; +} +.indexContainer { + margin:10px; + position:relative; + font-size:12px; +} +.indexContainer h2 { + font-size:13px; + padding:0 0 3px 0; +} +.indexContainer ul { + margin:0; + padding:0; +} +.indexContainer ul li { + list-style:none; + padding-top:2px; +} +.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { + font-size:12px; + font-weight:bold; + margin:10px 0 0 0; + color:#4E4E4E; +} +.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { + margin:5px 0 10px 0px; + font-size:14px; + font-family:'DejaVu Sans Mono',monospace; +} +.serializedFormContainer dl.nameValue dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +.serializedFormContainer dl.nameValue dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* +List styles +*/ +ul.horizontal li { + display:inline; + font-size:0.9em; +} +ul.inheritance { + margin:0; + padding:0; +} +ul.inheritance li { + display:inline; + list-style:none; +} +ul.inheritance li ul.inheritance { + margin-left:15px; + padding-left:15px; + padding-top:1px; +} +ul.blockList, ul.blockListLast { + margin:10px 0 10px 0; + padding:0; +} +ul.blockList li.blockList, ul.blockListLast li.blockList { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { + padding:0px 20px 5px 10px; + border:1px solid #ededed; + background-color:#f8f8f8; +} +ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { + padding:0 0 5px 8px; + background-color:#ffffff; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { + margin-left:0; + padding-left:0; + padding-bottom:15px; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { + list-style:none; + border-bottom:none; + padding-bottom:0; +} +table tr td dl, table tr td dl dt, table tr td dl dd { + margin-top:0; + margin-bottom:1px; +} +/* +Table styles +*/ +.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary { + width:100%; + border-left:1px solid #EEE; + border-right:1px solid #EEE; + border-bottom:1px solid #EEE; +} +.overviewSummary, .memberSummary { + padding:0px; +} +.overviewSummary caption, .memberSummary caption, .typeSummary caption, +.useSummary caption, .constantsSummary caption, .deprecatedSummary caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:#253441; + font-weight:bold; + clear:none; + overflow:hidden; + padding:0px; + padding-top:10px; + padding-left:1px; + margin:0px; + white-space:pre; +} +.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link, +.useSummary caption a:link, .constantsSummary caption a:link, .deprecatedSummary caption a:link, +.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover, +.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover, +.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active, +.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active, +.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited, +.useSummary caption a:visited, .constantsSummary caption a:visited, .deprecatedSummary caption a:visited { + color:#FFFFFF; +} +.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span, +.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + padding-bottom:7px; + display:inline-block; + float:left; + background-color:#F8981D; + border: none; + height:16px; +} +.memberSummary caption span.activeTableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#F8981D; + height:16px; +} +.memberSummary caption span.tableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#4D7A97; + height:16px; +} +.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab { + padding-top:0px; + padding-left:0px; + padding-right:0px; + background-image:none; + float:none; + display:inline; +} +.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd, +.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd { + display:none; + width:5px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .activeTableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .tableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + background-color:#4D7A97; + float:left; + +} +.overviewSummary td, .memberSummary td, .typeSummary td, +.useSummary td, .constantsSummary td, .deprecatedSummary td { + text-align:left; + padding:0px 0px 12px 10px; + width:100%; +} +th.colOne, th.colFirst, th.colLast, .useSummary th, .constantsSummary th, +td.colOne, td.colFirst, td.colLast, .useSummary td, .constantsSummary td{ + vertical-align:top; + padding-right:0px; + padding-top:8px; + padding-bottom:3px; +} +th.colFirst, th.colLast, th.colOne, .constantsSummary th { + background:#dee3e9; + text-align:left; + padding:8px 3px 3px 7px; +} +td.colFirst, th.colFirst { + white-space:nowrap; + font-size:13px; +} +td.colLast, th.colLast { + font-size:13px; +} +td.colOne, th.colOne { + font-size:13px; +} +.overviewSummary td.colFirst, .overviewSummary th.colFirst, +.overviewSummary td.colOne, .overviewSummary th.colOne, +.memberSummary td.colFirst, .memberSummary th.colFirst, +.memberSummary td.colOne, .memberSummary th.colOne, +.typeSummary td.colFirst{ + width:25%; + vertical-align:top; +} +td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover { + font-weight:bold; +} +.tableSubHeadingColor { + background-color:#EEEEFF; +} +.altColor { + background-color:#FFFFFF; +} +.rowColor { + background-color:#EEEEEF; +} +/* +Content styles +*/ +.description pre { + margin-top:0; +} +.deprecatedContent { + margin:0; + padding:10px 0; +} +.docSummary { + padding:0; +} + +ul.blockList ul.blockList ul.blockList li.blockList h3 { + font-style:normal; +} + +div.block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} + +td.colLast div { + padding-top:0px; +} + + +td.colLast a { + padding-bottom:3px; +} +/* +Formatting effect styles +*/ +.sourceLineNo { + color:green; + padding:0 30px 0 0; +} +h1.hidden { + visibility:hidden; + overflow:hidden; + font-size:10px; +} +.block { + display:block; + margin:3px 10px 2px 0px; + color:#474747; +} +.deprecatedLabel, .descfrmTypeLabel, .memberNameLabel, .memberNameLink, +.overrideSpecifyLabel, .packageHierarchyLabel, .paramLabel, .returnLabel, +.seeLabel, .simpleTagLabel, .throwsLabel, .typeNameLabel, .typeNameLink { + font-weight:bold; +} +.deprecationComment, .emphasizedPhrase, .interfaceName { + font-style:italic; +} + +div.block div.block span.deprecationComment, div.block div.block span.emphasizedPhrase, +div.block div.block span.interfaceName { + font-style:normal; +} + +div.contentContainer ul.blockList li.blockList h2{ + padding-bottom:0px; +} diff --git a/CDL.java b/src/org/json/CDL.java similarity index 100% rename from CDL.java rename to src/org/json/CDL.java diff --git a/Cookie.java b/src/org/json/Cookie.java similarity index 100% rename from Cookie.java rename to src/org/json/Cookie.java diff --git a/CookieList.java b/src/org/json/CookieList.java similarity index 100% rename from CookieList.java rename to src/org/json/CookieList.java diff --git a/HTTP.java b/src/org/json/HTTP.java similarity index 100% rename from HTTP.java rename to src/org/json/HTTP.java diff --git a/HTTPTokener.java b/src/org/json/HTTPTokener.java similarity index 100% rename from HTTPTokener.java rename to src/org/json/HTTPTokener.java diff --git a/JSONArray.java b/src/org/json/JSONArray.java similarity index 100% rename from JSONArray.java rename to src/org/json/JSONArray.java diff --git a/JSONException.java b/src/org/json/JSONException.java similarity index 100% rename from JSONException.java rename to src/org/json/JSONException.java diff --git a/JSONML.java b/src/org/json/JSONML.java similarity index 100% rename from JSONML.java rename to src/org/json/JSONML.java diff --git a/JSONObject.java b/src/org/json/JSONObject.java similarity index 91% rename from JSONObject.java rename to src/org/json/JSONObject.java index ed1159e9c..93806a826 100755 --- a/JSONObject.java +++ b/src/org/json/JSONObject.java @@ -1,1847 +1,1930 @@ -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.StringWriter; -import java.io.Writer; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.math.*; -import java.util.Collection; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Locale; -import java.util.Map; -import java.util.Map.Entry; -import java.util.ResourceBundle; -import java.util.Set; - -/** - * 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: - *

- * - * @author JSON.org - * @version 2015-07-22 - */ -public class JSONObject { - /** - * 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". - */ - public String toString() { - return "null"; - } - } - - /** - * The map where the JSONObject's properties are kept. - */ - private final Map 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. - */ - public JSONObject(JSONTokener x) throws JSONException { - this(); - char c; - String key; - - if (x.nextClean() != '{') { - throw x.syntaxError("A JSONObject text must begin with '{'"); - } - for (;;) { - c = x.nextClean(); - switch (c) { - case 0: - throw x.syntaxError("A JSONObject text must end with '}'"); - case '}': - return; - default: - x.back(); - key = x.nextValue().toString(); - } - -// The key is followed by ':'. - - c = x.nextClean(); - if (c != ':') { - throw x.syntaxError("Expected a ':' after a key"); - } - this.putOnce(key, x.nextValue()); - -// Pairs are separated by ','. - - switch (x.nextClean()) { - case ';': - case ',': - if (x.nextClean() == '}') { - return; - } - x.back(); - break; - case '}': - return; - default: - throw x.syntaxError("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 - */ - public JSONObject(Map map) { - this.map = new HashMap(); - if (map != null) { - Iterator> i = map.entrySet().iterator(); - while (i.hasNext()) { - Entry entry = i.next(); - Object value = entry.getValue(); - if (value != null) { - this.map.put(entry.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. - */ - public JSONObject(Object bean) { - this(); - this.populateMap(bean); - } - - /** - * 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. - */ - public JSONObject(String source) throws JSONException { - this(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 JSONObject(String baseName, Locale locale) throws JSONException { - 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 != null) { - -// 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; - JSONObject target = this; - for (int i = 0; i < last; i += 1) { - String segment = path[i]; - JSONObject nextTarget = target.optJSONObject(segment); - if (nextTarget == null) { - nextTarget = new JSONObject(); - 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. - */ - public static 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. - */ - public Object get(String key) throws JSONException { - if (key == null) { - throw new JSONException("Null key."); - } - Object object = this.opt(key); - if (object == null) { - throw new JSONException("JSONObject[" + quote(key) + "] not found."); - } - return object; - } - - /** - * Get the enum value associated with a key. - * - * @param clazz - * The type of enum to retrieve. - * @param key - * A key string. - * @return The enum value associated with the key - * @throws JSONException - * if the key is not found or if the value cannot be converted - * to an enum. - */ - public > E getEnum(Class clazz, String key) throws JSONException { - E val = optEnum(clazz, key); - if(val==null) { - // JSONException should really take a throwable argument. - // If it did, I would re-implement this with the Enum.valueOf - // method and place any thrown exception in the JSONException - throw new JSONException("JSONObject[" + quote(key) - + "] is not an enum of type " + quote(clazz.getSimpleName()) - + "."); - } - return val; - } - - /** - * 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 getBoolean(String key) throws JSONException { - 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 JSONException("JSONObject[" + quote(key) - + "] is not a Boolean."); - } - - /** - * Get the BigInteger 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 cannot - * be converted to BigInteger. - */ - public BigInteger getBigInteger(String key) throws JSONException { - Object object = this.get(key); - try { - return new BigInteger(object.toString()); - } catch (Exception e) { - throw new JSONException("JSONObject[" + quote(key) - + "] could not be converted to BigInteger."); - } - } - - /** - * Get the BigDecimal 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 - * cannot be converted to BigDecimal. - */ - public BigDecimal getBigDecimal(String key) throws JSONException { - Object object = this.get(key); - try { - return new BigDecimal(object.toString()); - } catch (Exception e) { - throw new JSONException("JSONObject[" + quote(key) - + "] could not be converted to BigDecimal."); - } - } - - /** - * 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 getDouble(String key) throws JSONException { - Object object = this.get(key); - try { - return object instanceof Number ? ((Number) object).doubleValue() - : Double.parseDouble((String) object); - } catch (Exception e) { - throw new JSONException("JSONObject[" + quote(key) - + "] is not a number."); - } - } - - /** - * 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 getInt(String key) throws JSONException { - Object object = this.get(key); - try { - return object instanceof Number ? ((Number) object).intValue() - : Integer.parseInt((String) object); - } catch (Exception e) { - throw new JSONException("JSONObject[" + quote(key) - + "] is not an int."); - } - } - - /** - * 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 getJSONArray(String key) throws JSONException { - Object object = this.get(key); - if (object instanceof JSONArray) { - return (JSONArray) object; - } - throw new JSONException("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 getJSONObject(String key) throws JSONException { - Object object = this.get(key); - if (object instanceof JSONObject) { - return (JSONObject) object; - } - throw new JSONException("JSONObject[" + quote(key) - + "] is not a JSONObject."); - } - - /** - * 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 getLong(String key) throws JSONException { - Object object = this.get(key); - try { - return object instanceof Number ? ((Number) object).longValue() - : Long.parseLong((String) object); - } catch (Exception e) { - throw new JSONException("JSONObject[" + quote(key) - + "] is not a long."); - } - } - - /** - * 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] = 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; - } - - /** - * 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 getString(String key) throws JSONException { - Object object = this.get(key); - if (object instanceof String) { - return (String) object; - } - throw new JSONException("JSONObject[" + quote(key) + "] not a string."); - } - - /** - * Determine if the JSONObject contains a specific key. - * - * @param key - * A key string. - * @return true if the key exists in the JSONObject. - */ - public boolean has(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 JSONObject increment(String key) throws JSONException { - Object value = this.opt(key); - if (value == null) { - this.put(key, 1); - } else if (value instanceof BigInteger) { - this.put(key, ((BigInteger)value).add(BigInteger.ONE)); - } else if (value instanceof BigDecimal) { - this.put(key, ((BigDecimal)value).add(BigDecimal.ONE)); - } else if (value instanceof Integer) { - this.put(key, (Integer) value + 1); - } else if (value instanceof Long) { - this.put(key, (Long) value + 1); - } else if (value instanceof Double) { - this.put(key, (Double) value + 1); - } else if (value instanceof Float) { - this.put(key, (Float) value + 1); - } else { - throw new JSONException("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. - */ - public 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(); - } - - /** - * 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 length() { - 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.put(keys.next()); - } - return ja.length() == 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. - */ - public static String numberToString(Number number) throws JSONException { - if (number == null) { - throw new JSONException("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. - */ - public Object opt(String key) { - return key == null ? null : this.map.get(key); - } - - /** - * Get the enum value associated with a key. - * - * @param clazz - * The type of enum to retrieve. - * @param key - * A key string. - * @return The enum value associated with the key or null if not found - */ - public > E optEnum(Class clazz, String key) { - return this.optEnum(clazz, key, null); - } - - /** - * Get the enum value associated with a key. - * - * @param clazz - * The type of enum to retrieve. - * @param key - * A key string. - * @param defaultValue - * The default in case the value is not found - * @return The enum value associated with the key or defaultValue - * if the value is not found or cannot be assigned to clazz - */ - public > E optEnum(Class clazz, String key, E defaultValue) { - try { - Object val = this.opt(key); - if (NULL.equals(val)) { - return defaultValue; - } - if (clazz.isAssignableFrom(val.getClass())) { - // we just checked it! - @SuppressWarnings("unchecked") - E myE = (E) val; - return myE; - } - return Enum.valueOf(clazz, val.toString()); - } catch (IllegalArgumentException | NullPointerException e) { - return defaultValue; - } - } - - /** - * 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. - */ - public 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. - */ - public 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. - */ - public double optDouble(String key) { - return this.optDouble(key, Double.NaN); - } - - /** - * Get an optional BigInteger 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. - */ - public BigInteger optBigInteger(String key, BigInteger defaultValue) { - try { - return this.getBigInteger(key); - } catch (Exception e) { - return defaultValue; - } - } - - /** - * Get an optional BigDecimal 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. - */ - public BigDecimal optBigDecimal(String key, BigDecimal defaultValue) { - try { - return this.getBigDecimal(key); - } catch (Exception e) { - return 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. - * - * @param key - * A key string. - * @param defaultValue - * The default. - * @return An object which is the value. - */ - public 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. - */ - public 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. - */ - public 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. - */ - public 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. - */ - public 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) { - } - } - } - - /** - * 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 put(String key, boolean value) throws JSONException { - this.put(key, value ? Boolean.TRUE : Boolean.FALSE); - return this; - } - - /** - * 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) throws JSONException { - this.put(key, new JSONArray(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 put(String key, double value) throws JSONException { - this.put(key, new Double(value)); - return this; - } - - /** - * 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 put(String key, int value) throws JSONException { - 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 put(String key, long value) throws JSONException { - this.put(key, new Long(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, Map value) throws JSONException { - 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. - */ - public JSONObject put(String key, Object value) throws JSONException { - if (key == null) { - throw new NullPointerException("Null key."); - } - if (value != null) { - testValidity(value); - 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 string - * @param value object - * @return this. - * @throws JSONException - * if the key is a duplicate - */ - public JSONObject putOnce(String key, Object value) throws JSONException { - if (key != null && value != null) { - if (this.opt(key) != null) { - throw new JSONException("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) throws JSONException { - 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); - } - - /** - * Determine if two JSONObjects are similar. - * They must contain the same set of names which must be associated with - * similar values. - * - * @param other The other JSONObject - * @return true if they are equal - */ - public boolean similar(Object other) { - try { - if (!(other instanceof JSONObject)) { - return false; - } - Set set = this.keySet(); - if (!set.equals(((JSONObject)other).keySet())) { - return false; - } - Iterator iterator = set.iterator(); - while (iterator.hasNext()) { - String name = iterator.next(); - Object valueThis = this.get(name); - Object valueOther = ((JSONObject)other).get(name); - if (valueThis instanceof JSONObject) { - if (!((JSONObject)valueThis).similar(valueOther)) { - return false; - } - } else if (valueThis instanceof JSONArray) { - if (!((JSONArray)valueThis).similar(valueOther)) { - return false; - } - } else if (!valueThis.equals(valueOther)) { - return false; - } - } - return true; - } catch (Throwable exception) { - return false; - } - } - - /** - * 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. - */ - public static 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. - */ - - char b = string.charAt(0); - if ((b >= '0' && b <= '9') || 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 (string.equals(myLong.toString())) { - if (myLong == myLong.intValue()) { - return 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. - */ - public static void testValidity(Object o) throws JSONException { - if (o != null) { - if (o instanceof Double) { - if (((Double) o).isInfinite() || ((Double) o).isNaN()) { - throw new JSONException( - "JSON does not allow non-finite numbers."); - } - } else if (o instanceof Float) { - if (((Float) o).isInfinite() || ((Float) o).isNaN()) { - throw new JSONException( - "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) throws JSONException { - if (names == null || names.length() == 0) { - return null; - } - JSONArray ja = new JSONArray(); - for (int i = 0; i < names.length(); i += 1) { - ja.put(this.opt(names.getString(i))); - } - return ja; - } - - /** - * 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. - * - * @return a printable, displayable, portable, transmittable representation - * of the object, beginning with { (left - * brace) and ending with } (right - * brace). - */ - public String toString() { - try { - return this.toString(0); - } 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 toString(int indentFactor) throws JSONException { - 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. - */ - public static String valueToString(Object value) throws JSONException { - if (value == null || value.equals(null)) { - return "null"; - } - if (value instanceof JSONString) { - Object object; - try { - object = ((JSONString) value).toJSONString(); - } catch (Exception e) { - throw new JSONException(e); - } - if (object instanceof String) { - return (String) object; - } - throw new JSONException("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) { - @SuppressWarnings("unchecked") - Map map = (Map) value; - return new JSONObject(map).toString(); - } - if (value instanceof Collection) { - @SuppressWarnings("unchecked") - Collection coll = (Collection) value; - return new JSONArray(coll).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 - */ - public static 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 || object instanceof BigInteger - || object instanceof BigDecimal) { - return object; - } - - if (object instanceof Collection) { - @SuppressWarnings("unchecked") - Collection coll = (Collection) object; - return new JSONArray(coll); - } - if (object.getClass().isArray()) { - return new JSONArray(object); - } - if (object instanceof Map) { - @SuppressWarnings("unchecked") - Map map = (Map) object; - return new JSONObject(map); - } - 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 - */ - public Writer write(Writer writer) throws JSONException { - return this.write(writer, 0, 0); - } - - static final Writer writeValue(Writer writer, Object value, - int indentFactor, int indent) throws JSONException, 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) { - @SuppressWarnings("unchecked") - Map map = (Map) value; - new JSONObject(map).write(writer, indentFactor, indent); - } else if (value instanceof Collection) { - @SuppressWarnings("unchecked") - Collection coll = (Collection) value; - new JSONArray(coll).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 JSONException(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 - */ - Writer write(Writer writer, int indentFactor, int indent) - throws JSONException { - try { - boolean commanate = false; - final int length = this.length(); - Iterator keys = this.keys(); - writer.write('{'); - - if (length == 1) { - Object key = keys.next(); - writer.write(quote(key.toString())); - writer.write(':'); - if (indentFactor > 0) { - writer.write(' '); - } - writeValue(writer, this.map.get(key), indentFactor, indent); - } else if (length != 0) { - final int newindent = indent + indentFactor; - while (keys.hasNext()) { - Object key = keys.next(); - if (commanate) { - writer.write(','); - } - if (indentFactor > 0) { - writer.write('\n'); - } - indent(writer, newindent); - writer.write(quote(key.toString())); - writer.write(':'); - if (indentFactor > 0) { - writer.write(' '); - } - writeValue(writer, this.map.get(key), indentFactor, newindent); - commanate = true; - } - if (indentFactor > 0) { - writer.write('\n'); - } - indent(writer, indent); - } - writer.write('}'); - return writer; - } catch (IOException exception) { - throw new JSONException(exception); - } - } -} +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.StringWriter; +import java.io.Writer; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.math.*; +import java.util.Collection; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Locale; +import java.util.Map; +import java.util.Map.Entry; +import java.util.ResourceBundle; +import java.util.Set; + +/** + * 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.
  • + *
+ * + * @author JSON.org + * @version 2015-07-22 + */ +public class JSONObject { + /** + * 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". + */ + public String toString() { + return "null"; + } + } + + /** + * The map where the JSONObject's properties are kept. + */ + private final Map 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. + */ + public JSONObject(JSONTokener x) throws JSONException { + this(); + char c; + String key; + + if (x.nextClean() != '{') { + throw x.syntaxError("A JSONObject text must begin with '{'"); + } + for (;;) { + c = x.nextClean(); + switch (c) { + case 0: + throw x.syntaxError("A JSONObject text must end with '}'"); + case '}': + return; + default: + x.back(); + key = x.nextValue().toString(); + } + +// The key is followed by ':'. + + c = x.nextClean(); + if (c != ':') { + throw x.syntaxError("Expected a ':' after a key"); + } + this.putOnce(key, x.nextValue()); + +// Pairs are separated by ','. + + switch (x.nextClean()) { + case ';': + case ',': + if (x.nextClean() == '}') { + return; + } + x.back(); + break; + case '}': + return; + default: + throw x.syntaxError("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 + */ + public JSONObject(Map map) { + this.map = new HashMap(); + if (map != null) { + Iterator> i = map.entrySet().iterator(); + while (i.hasNext()) { + Entry entry = i.next(); + Object value = entry.getValue(); + if (value != null) { + this.map.put(entry.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. + */ + public JSONObject(Object bean) { + this(); + this.populateMap(bean); + } + + /** + * 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. + */ + public JSONObject(String source) throws JSONException { + this(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 JSONObject(String baseName, Locale locale) throws JSONException { + 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 != null) { + +// 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; + JSONObject target = this; + for (int i = 0; i < last; i += 1) { + String segment = path[i]; + JSONObject nextTarget = target.optJSONObject(segment); + if (nextTarget == null) { + nextTarget = new JSONObject(); + 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. + */ + public static 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. + */ + public Object get(String key) throws JSONException { + if (key == null) { + throw new JSONException("Null key."); + } + Object object = this.opt(key); + if (object == null) { + throw new JSONException("JSONObject[" + quote(key) + "] not found."); + } + return object; + } + + /** + * Get the enum value associated with a key. + * + * @param clazz + * The type of enum to retrieve. + * @param key + * A key string. + * @return The enum value associated with the key + * @throws JSONException + * if the key is not found or if the value cannot be converted + * to an enum. + */ + public > E getEnum(Class clazz, String key) throws JSONException { + E val = optEnum(clazz, key); + if(val==null) { + // JSONException should really take a throwable argument. + // If it did, I would re-implement this with the Enum.valueOf + // method and place any thrown exception in the JSONException + throw new JSONException("JSONObject[" + quote(key) + + "] is not an enum of type " + quote(clazz.getSimpleName()) + + "."); + } + return val; + } + + /** + * 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 getBoolean(String key) throws JSONException { + 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 JSONException("JSONObject[" + quote(key) + + "] is not a Boolean."); + } + /** + * Get the boolean associated with a key. If the key doesn't exist, or any errors occur, return defaultValue instead. + * + * @param key A key String. + * @param defaultValue The value to return if the key doesn't exist or errors occur. + * @return The truth. + * @author Lukas Rose, lukas.rose@gmx.de + */ + public boolean getBooleanSafe(String key, boolean defaultValue){ + if (has(key)) try {return getBoolean(key);} catch (JSONException ex) {return defaultValue;} else return defaultValue; + } + + /** + * Get the BigInteger 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 cannot + * be converted to BigInteger. + */ + public BigInteger getBigInteger(String key) throws JSONException { + Object object = this.get(key); + try { + return new BigInteger(object.toString()); + } catch (Exception e) { + throw new JSONException("JSONObject[" + quote(key) + + "] could not be converted to BigInteger."); + } + } + + /** + * Get the BigInteger value associated with a key. If the key doesn't exist, or any errors occur, return defaultValue instead. + * + * @param key A key String. + * @param defaultValue The value to return if the key doesn't exist or errors occur. + * @return The numeric value. + * @author Lukas Rose, lukas.rose@gmx.de + */ + public BigInteger getBigIntegerSafe(String key, BigInteger defaultValue){ + if (has(key)) try {return getBigInteger(key);} catch (JSONException ex) {return defaultValue;} else return defaultValue; + } + + /** + * Get the BigDecimal 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 + * cannot be converted to BigDecimal. + */ + public BigDecimal getBigDecimal(String key) throws JSONException { + Object object = this.get(key); + try { + return new BigDecimal(object.toString()); + } catch (Exception e) { + throw new JSONException("JSONObject[" + quote(key) + + "] could not be converted to BigDecimal."); + } + } + + /** + * Get the BigDecimal value associated with a key. If the key doesn't exist, or any errors occur, return defaultValue instead. + * + * @param key A key String. + * @param defaultValue The value to return if the key doesn't exist or errors occur. + * @return The numeric value. + * @author Lukas Rose, lukas.rose@gmx.de + */ + public BigDecimal getBigDecimalSafe(String key, BigDecimal defaultValue){ + if (has(key)) try {return getBigDecimal(key);} catch (JSONException ex) {return defaultValue;} else return defaultValue; + } + + /** + * 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 getDouble(String key) throws JSONException { + Object object = this.get(key); + try { + return object instanceof Number ? ((Number) object).doubleValue() + : Double.parseDouble((String) object); + } catch (Exception e) { + throw new JSONException("JSONObject[" + quote(key) + + "] is not a number."); + } + } + + /** + * Get the double value associated with a key. If the key doesn't exist, or any errors occur, return defaultValue instead. + * + * @param key A key String. + * @param defaultValue The value to return if the key doesn't exist or errors occur. + * @return The numeric value. + * @author Lukas Rose, lukas.rose@gmx.de + */ + public double getDoubleSafe(String key, double defaultValue){ + if (has(key)) try {return getDouble(key);} catch (JSONException ex) {return defaultValue;} else return defaultValue; + } + + /** + * 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 getInt(String key) throws JSONException { + Object object = this.get(key); + try { + return object instanceof Number ? ((Number) object).intValue() + : Integer.parseInt((String) object); + } catch (Exception e) { + throw new JSONException("JSONObject[" + quote(key) + + "] is not an int."); + } + } + + /** + * Get the int value associated with a key. If the key doesn't exist, or any errors occur, return defaultValue instead. + * + * @param key A key String. + * @param defaultValue The value to return if the key doesn't exist or errors occur. + * @return The numeric value. + * @author Lukas Rose, lukas.rose@gmx.de + */ + public int getIntSafe(String key, int defaultValue){ + if (has(key)) try {return getInt(key);} catch (JSONException ex) {return defaultValue;} else return defaultValue; + } + + /** + * 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 getJSONArray(String key) throws JSONException { + Object object = this.get(key); + if (object instanceof JSONArray) { + return (JSONArray) object; + } + throw new JSONException("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 getJSONObject(String key) throws JSONException { + Object object = this.get(key); + if (object instanceof JSONObject) { + return (JSONObject) object; + } + throw new JSONException("JSONObject[" + quote(key) + + "] is not a JSONObject."); + } + + /** + * 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 getLong(String key) throws JSONException { + Object object = this.get(key); + try { + return object instanceof Number ? ((Number) object).longValue() + : Long.parseLong((String) object); + } catch (Exception e) { + throw new JSONException("JSONObject[" + quote(key) + + "] is not a long."); + } + } + + /** + * Get the long value associated with a key. If the key doesn't exist, or any errors occur, return defaultValue instead. + * + * @param key A key String. + * @param defaultValue The value to return if the key doesn't exist or errors occur. + * @return The numeric value. + * @author Lukas Rose, lukas.rose@gmx.de + */ + public long getBigIntegerSafe(String key, long defaultValue){ + if (has(key)) try {return getLong(key);} catch (JSONException ex) {return defaultValue;} else return defaultValue; + } + + /** + * 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] = 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; + } + + /** + * 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 getString(String key) throws JSONException { + Object object = this.get(key); + if (object instanceof String) { + return (String) object; + } + throw new JSONException("JSONObject[" + quote(key) + "] not a string."); + } + + /** + * Get the string associated with a key. If the key doesn't exist, or any errors occur, return defaultValue instead. + * + * @param key A key String. + * @param defaultValue The value to return if the key doesn't exist or errors occur. + * @return A string which is the value. + * @author Lukas Rose, lukas.rose@gmx.de + */ + public String getStringSafe(String key, String defaultValue){ + if (has(key)) try {return getString(key);} catch (JSONException ex) {return defaultValue;} else return defaultValue; + } + + /** + * Determine if the JSONObject contains a specific key. + * + * @param key + * A key string. + * @return true if the key exists in the JSONObject. + */ + public boolean has(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 JSONObject increment(String key) throws JSONException { + Object value = this.opt(key); + if (value == null) { + this.put(key, 1); + } else if (value instanceof BigInteger) { + this.put(key, ((BigInteger)value).add(BigInteger.ONE)); + } else if (value instanceof BigDecimal) { + this.put(key, ((BigDecimal)value).add(BigDecimal.ONE)); + } else if (value instanceof Integer) { + this.put(key, (Integer) value + 1); + } else if (value instanceof Long) { + this.put(key, (Long) value + 1); + } else if (value instanceof Double) { + this.put(key, (Double) value + 1); + } else if (value instanceof Float) { + this.put(key, (Float) value + 1); + } else { + throw new JSONException("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. + */ + public 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(); + } + + /** + * 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 length() { + 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.put(keys.next()); + } + return ja.length() == 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. + */ + public static String numberToString(Number number) throws JSONException { + if (number == null) { + throw new JSONException("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. + */ + public Object opt(String key) { + return key == null ? null : this.map.get(key); + } + + /** + * Get the enum value associated with a key. + * + * @param clazz + * The type of enum to retrieve. + * @param key + * A key string. + * @return The enum value associated with the key or null if not found + */ + public > E optEnum(Class clazz, String key) { + return this.optEnum(clazz, key, null); + } + + /** + * Get the enum value associated with a key. + * + * @param clazz + * The type of enum to retrieve. + * @param key + * A key string. + * @param defaultValue + * The default in case the value is not found + * @return The enum value associated with the key or defaultValue + * if the value is not found or cannot be assigned to clazz + */ + public > E optEnum(Class clazz, String key, E defaultValue) { + try { + Object val = this.opt(key); + if (NULL.equals(val)) { + return defaultValue; + } + if (clazz.isAssignableFrom(val.getClass())) { + // we just checked it! + @SuppressWarnings("unchecked") + E myE = (E) val; + return myE; + } + return Enum.valueOf(clazz, val.toString()); + } catch (IllegalArgumentException | NullPointerException e) { + return defaultValue; + } + } + + /** + * 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. + */ + public 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. + */ + public 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. + */ + public double optDouble(String key) { + return this.optDouble(key, Double.NaN); + } + + /** + * Get an optional BigInteger 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. + */ + public BigInteger optBigInteger(String key, BigInteger defaultValue) { + try { + return this.getBigInteger(key); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * Get an optional BigDecimal 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. + */ + public BigDecimal optBigDecimal(String key, BigDecimal defaultValue) { + try { + return this.getBigDecimal(key); + } catch (Exception e) { + return 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. + * + * @param key + * A key string. + * @param defaultValue + * The default. + * @return An object which is the value. + */ + public 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. + */ + public 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. + */ + public 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. + */ + public 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. + */ + public 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) { + } + } + } + + /** + * 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 put(String key, boolean value) throws JSONException { + this.put(key, value ? Boolean.TRUE : Boolean.FALSE); + return this; + } + + /** + * 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) throws JSONException { + this.put(key, new JSONArray(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 put(String key, double value) throws JSONException { + this.put(key, new Double(value)); + return this; + } + + /** + * 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 put(String key, int value) throws JSONException { + 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 put(String key, long value) throws JSONException { + this.put(key, new Long(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, Map value) throws JSONException { + 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. + */ + public JSONObject put(String key, Object value) throws JSONException { + if (key == null) { + throw new NullPointerException("Null key."); + } + if (value != null) { + testValidity(value); + 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 string + * @param value object + * @return this. + * @throws JSONException + * if the key is a duplicate + */ + public JSONObject putOnce(String key, Object value) throws JSONException { + if (key != null && value != null) { + if (this.opt(key) != null) { + throw new JSONException("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) throws JSONException { + 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); + } + + /** + * Determine if two JSONObjects are similar. + * They must contain the same set of names which must be associated with + * similar values. + * + * @param other The other JSONObject + * @return true if they are equal + */ + public boolean similar(Object other) { + try { + if (!(other instanceof JSONObject)) { + return false; + } + Set set = this.keySet(); + if (!set.equals(((JSONObject)other).keySet())) { + return false; + } + Iterator iterator = set.iterator(); + while (iterator.hasNext()) { + String name = iterator.next(); + Object valueThis = this.get(name); + Object valueOther = ((JSONObject)other).get(name); + if (valueThis instanceof JSONObject) { + if (!((JSONObject)valueThis).similar(valueOther)) { + return false; + } + } else if (valueThis instanceof JSONArray) { + if (!((JSONArray)valueThis).similar(valueOther)) { + return false; + } + } else if (!valueThis.equals(valueOther)) { + return false; + } + } + return true; + } catch (Throwable exception) { + return false; + } + } + + /** + * 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. + */ + public static 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. + */ + + char b = string.charAt(0); + if ((b >= '0' && b <= '9') || 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 (string.equals(myLong.toString())) { + if (myLong == myLong.intValue()) { + return 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. + */ + public static void testValidity(Object o) throws JSONException { + if (o != null) { + if (o instanceof Double) { + if (((Double) o).isInfinite() || ((Double) o).isNaN()) { + throw new JSONException( + "JSON does not allow non-finite numbers."); + } + } else if (o instanceof Float) { + if (((Float) o).isInfinite() || ((Float) o).isNaN()) { + throw new JSONException( + "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) throws JSONException { + if (names == null || names.length() == 0) { + return null; + } + JSONArray ja = new JSONArray(); + for (int i = 0; i < names.length(); i += 1) { + ja.put(this.opt(names.getString(i))); + } + return ja; + } + + /** + * 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. + * + * @return a printable, displayable, portable, transmittable representation + * of the object, beginning with { (left + * brace) and ending with } (right + * brace). + */ + public String toString() { + try { + return this.toString(0); + } 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 toString(int indentFactor) throws JSONException { + 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. + */ + public static String valueToString(Object value) throws JSONException { + if (value == null || value.equals(null)) { + return "null"; + } + if (value instanceof JSONString) { + Object object; + try { + object = ((JSONString) value).toJSONString(); + } catch (Exception e) { + throw new JSONException(e); + } + if (object instanceof String) { + return (String) object; + } + throw new JSONException("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) { + @SuppressWarnings("unchecked") + Map map = (Map) value; + return new JSONObject(map).toString(); + } + if (value instanceof Collection) { + @SuppressWarnings("unchecked") + Collection coll = (Collection) value; + return new JSONArray(coll).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 + */ + public static 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 || object instanceof BigInteger + || object instanceof BigDecimal) { + return object; + } + + if (object instanceof Collection) { + @SuppressWarnings("unchecked") + Collection coll = (Collection) object; + return new JSONArray(coll); + } + if (object.getClass().isArray()) { + return new JSONArray(object); + } + if (object instanceof Map) { + @SuppressWarnings("unchecked") + Map map = (Map) object; + return new JSONObject(map); + } + 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 + */ + public Writer write(Writer writer) throws JSONException { + return this.write(writer, 0, 0); + } + + static final Writer writeValue(Writer writer, Object value, + int indentFactor, int indent) throws JSONException, 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) { + @SuppressWarnings("unchecked") + Map map = (Map) value; + new JSONObject(map).write(writer, indentFactor, indent); + } else if (value instanceof Collection) { + @SuppressWarnings("unchecked") + Collection coll = (Collection) value; + new JSONArray(coll).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 JSONException(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 + */ + Writer write(Writer writer, int indentFactor, int indent) + throws JSONException { + try { + boolean commanate = false; + final int length = this.length(); + Iterator keys = this.keys(); + writer.write('{'); + + if (length == 1) { + Object key = keys.next(); + writer.write(quote(key.toString())); + writer.write(':'); + if (indentFactor > 0) { + writer.write(' '); + } + writeValue(writer, this.map.get(key), indentFactor, indent); + } else if (length != 0) { + final int newindent = indent + indentFactor; + while (keys.hasNext()) { + Object key = keys.next(); + if (commanate) { + writer.write(','); + } + if (indentFactor > 0) { + writer.write('\n'); + } + indent(writer, newindent); + writer.write(quote(key.toString())); + writer.write(':'); + if (indentFactor > 0) { + writer.write(' '); + } + writeValue(writer, this.map.get(key), indentFactor, newindent); + commanate = true; + } + if (indentFactor > 0) { + writer.write('\n'); + } + indent(writer, indent); + } + writer.write('}'); + return writer; + } catch (IOException exception) { + throw new JSONException(exception); + } + } +} diff --git a/JSONString.java b/src/org/json/JSONString.java similarity index 100% rename from JSONString.java rename to src/org/json/JSONString.java diff --git a/JSONStringer.java b/src/org/json/JSONStringer.java similarity index 100% rename from JSONStringer.java rename to src/org/json/JSONStringer.java diff --git a/JSONTokener.java b/src/org/json/JSONTokener.java similarity index 100% rename from JSONTokener.java rename to src/org/json/JSONTokener.java diff --git a/JSONWriter.java b/src/org/json/JSONWriter.java similarity index 100% rename from JSONWriter.java rename to src/org/json/JSONWriter.java diff --git a/Property.java b/src/org/json/Property.java similarity index 100% rename from Property.java rename to src/org/json/Property.java diff --git a/XML.java b/src/org/json/XML.java similarity index 100% rename from XML.java rename to src/org/json/XML.java diff --git a/XMLTokener.java b/src/org/json/XMLTokener.java similarity index 100% rename from XMLTokener.java rename to src/org/json/XMLTokener.java