Class JSONTokener
constructor
and nextValue() method. Example usage:
String json = "{"
+ " \"query\": \"Pizza\", "
+ " \"locations\": [ 94043, 90210 ] "
+ "}";
JSONObject object = (JSONObject) new JSONTokener(json).nextValue();
String query = object.getString("query");
JSONArray locations = object.getJSONArray("locations");
For best interoperability and performance use JSON that complies with
RFC 4627, such as that generated by JSONStringer. For legacy reasons
this parser is lenient, so a successful parse does not indicate that the
input string was valid JSON. All of the following syntax errors will be
ignored:
- End of line comments starting with
//or#and ending with a newline character. - C-style comments starting with
/*and ending with*/. Such comments may not be nested. - Strings that are unquoted or
'single quoted'. - Hexadecimal integers prefixed with
0xor0X. - Octal integers prefixed with
0. - Array elements separated by
;. - Unnecessary array separators. These are interpreted as if null was the omitted value.
- Key-value pairs separated by
=or=>. - Key-value pairs separated by
;.
Each tokener may be used to parse a single JSON string. Instances of this class are not thread safe. Although this class is nonfinal, it was not designed for inheritance and should not be subclassed. In particular, self-use by overrideable methods is not specified. See Effective Java Item 17, "Design and Document or inheritance or else prohibit it" for further information.
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidback()Unreads the most recent character of input.static intdehexchar(char hex) Returns the integer [0..15] value for the given hex character, or -1 for non-hex input.booleanmore()Returns true until the input has been exhausted.charnext()Returns the next available character, or the null character '\0' if all input has been exhausted.charnext(char c) Returns the next available character if it equalsc.next(int length) Returns the nextlengthcharacters of the input.charReturns the next character that is not whitespace and does not belong to a comment.private intnextString(char quote) Returns the string up to but not includingquote, unescaping any character escape sequences encountered along the way.nextTo(char excluded) Equivalent tonextTo(String.valueOf(excluded)).Returns thetrimmedstring holding the characters up to but not including the first of: any character inexcludeda newline character '\n' a carriage return '\r'private StringnextToInternal(String excluded) Returns the string up to but not including any of the given characters or a newline character.Returns the next value from the input.private JSONArrayReads a sequence of values and the trailing closing brace ']' of an array.private charUnescapes the character identified by the character or characters that immediately follow a backslash.private ObjectReads a null, boolean, numeric or unquoted string literal value.private JSONObjectReads a sequence of key/value pairs and the trailing closing brace '}' of an object.voidAdvances past all input up to and including the next occurrence ofthru.charskipTo(char to) Advances past all input up to but not including the next occurrence ofto.private voidAdvances the position until after the next newline character.syntaxError(String message) Returns an exception containing the given message plus the current position and the entire input string.toString()Returns the current position and the entire input string.
-
Field Details
-
in
The input JSON. -
pos
private int posThe index of the next character to be returned bynext(). When the input is exhausted, this equals the input's length.
-
-
Constructor Details
-
JSONTokener
- Parameters:
in- JSON encoded string. Null is not permitted and will yield a tokener that throwsNullPointerExceptionswhen methods are called.
-
-
Method Details
-
nextValue
Returns the next value from the input.- Returns:
- a
JSONObject,JSONArray, String, Boolean, Integer, Long, Double orJSONObject.NULL. - Throws:
JSONException- if the input is malformed.
-
nextCleanInternal
- Throws:
JSONException
-
skipToEndOfLine
private void skipToEndOfLine()Advances the position until after the next newline character. If the line is terminated by "\r\n", the '\n' must be consumed as whitespace by the caller. -
nextString
Returns the string up to but not includingquote, unescaping any character escape sequences encountered along the way. The opening quote should have already been read. This consumes the closing quote, but does not include it in the returned string.- Parameters:
quote- either ' or ".- Throws:
JSONException
-
readEscapeCharacter
Unescapes the character identified by the character or characters that immediately follow a backslash. The backslash '\' should have already been read. This supports both unicode escapes "u000A" and two-character escapes "\n".- Throws:
JSONException
-
readLiteral
Reads a null, boolean, numeric or unquoted string literal value. Numeric values will be returned as an Integer, Long, or Double, in that order of preference.- Throws:
JSONException
-
nextToInternal
Returns the string up to but not including any of the given characters or a newline character. This does not consume the excluded character. -
readObject
Reads a sequence of key/value pairs and the trailing closing brace '}' of an object. The opening brace '{' should have already been read.- Throws:
JSONException
-
readArray
Reads a sequence of values and the trailing closing brace ']' of an array. The opening brace '[' should have already been read. Note that "[]" yields an empty array, but "[,]" returns a two-element array equivalent to "[null,null]".- Throws:
JSONException
-
syntaxError
Returns an exception containing the given message plus the current position and the entire input string. -
toString
Returns the current position and the entire input string. -
more
public boolean more()Returns true until the input has been exhausted. -
next
public char next()Returns the next available character, or the null character '\0' if all input has been exhausted. The return value of this method is ambiguous for JSON strings that contain the character '\0'. -
next
Returns the next available character if it equalsc. Otherwise an exception is thrown.- Throws:
JSONException
-
nextClean
Returns the next character that is not whitespace and does not belong to a comment. If the input is exhausted before such a character can be found, the null character '\0' is returned. The return value of this method is ambiguous for JSON strings that contain the character '\0'.- Throws:
JSONException
-
next
Returns the nextlengthcharacters of the input.The returned string shares its backing character array with this tokener's input string. If a reference to the returned string may be held indefinitely, you should use
new String(result)to copy it first to avoid memory leaks.- Throws:
JSONException- if the remaining input is not long enough to satisfy this request.
-
nextTo
Returns thetrimmedstring holding the characters up to but not including the first of:- any character in
excluded - a newline character '\n'
- a carriage return '\r'
The returned string shares its backing character array with this tokener's input string. If a reference to the returned string may be held indefinitely, you should use
new String(result)to copy it first to avoid memory leaks.- Returns:
- a possibly-empty string
- any character in
-
nextTo
Equivalent tonextTo(String.valueOf(excluded)). -
skipPast
Advances past all input up to and including the next occurrence ofthru. If the remaining input doesn't containthru, the input is exhausted. -
skipTo
public char skipTo(char to) Advances past all input up to but not including the next occurrence ofto. If the remaining input doesn't containto, the input is unchanged. -
back
public void back()Unreads the most recent character of input. If no input characters have been read, the input is unchanged. -
dehexchar
public static int dehexchar(char hex) Returns the integer [0..15] value for the given hex character, or -1 for non-hex input.- Parameters:
hex- a character in the ranges [0-9], [A-F] or [a-f]. Any other character will yield a -1 result.
-