1
0
Fork 0
mirror of https://github.com/ethauvin/JSON-java.git synced 2025-06-17 07:50:52 -07:00
This commit is contained in:
Douglas Crockford 2011-11-24 07:40:50 -08:00
parent 9bb970c6bc
commit 2a39f47197
3 changed files with 308 additions and 302 deletions

View file

@ -36,7 +36,7 @@ SOFTWARE.
* it. It is used by the JSONObject and JSONArray constructors to parse
* JSON source strings.
* @author JSON.org
* @version 2010-12-24
* @version 2011-11-24
*/
public class JSONTokener {
@ -45,7 +45,7 @@ public class JSONTokener {
private int index;
private int line;
private char previous;
private Reader reader;
private final Reader reader;
private boolean usePrevious;
@ -55,8 +55,9 @@ public class JSONTokener {
* @param reader A reader.
*/
public JSONTokener(Reader reader) {
this.reader = reader.markSupported() ?
reader : new BufferedReader(reader);
this.reader = reader.markSupported()
? reader
: new BufferedReader(reader);
this.eof = false;
this.usePrevious = false;
this.previous = 0;
@ -64,13 +65,13 @@ public class JSONTokener {
this.character = 1;
this.line = 1;
}
/**
* Construct a JSONTokener from an InputStream.
*/
public JSONTokener(InputStream inputStream) throws JSONException {
this(new InputStreamReader(inputStream));
this(new InputStreamReader(inputStream));
}
@ -90,7 +91,7 @@ public class JSONTokener {
* the next number or identifier.
*/
public void back() throws JSONException {
if (usePrevious || index <= 0) {
if (this.usePrevious || this.index <= 0) {
throw new JSONException("Stepping back two steps is not supported");
}
this.index -= 1;
@ -118,9 +119,9 @@ public class JSONTokener {
}
return -1;
}
public boolean end() {
return eof && !usePrevious;
return this.eof && !this.usePrevious;
}
@ -130,11 +131,11 @@ public class JSONTokener {
* @return true if not yet at the end of the source.
*/
public boolean more() throws JSONException {
next();
if (end()) {
this.next();
if (this.end()) {
return false;
}
back();
}
this.back();
return true;
}
@ -155,11 +156,11 @@ public class JSONTokener {
} catch (IOException exception) {
throw new JSONException(exception);
}
if (c <= 0) { // End of stream
this.eof = true;
c = 0;
}
}
}
this.index += 1;
if (this.previous == '\r') {
@ -184,9 +185,9 @@ public class JSONTokener {
* @throws JSONException if the character does not match.
*/
public char next(char c) throws JSONException {
char n = next();
char n = this.next();
if (n != c) {
throw syntaxError("Expected '" + c + "' and instead saw '" +
throw this.syntaxError("Expected '" + c + "' and instead saw '" +
n + "'");
}
return n;
@ -211,9 +212,9 @@ public class JSONTokener {
int pos = 0;
while (pos < n) {
chars[pos] = next();
if (end()) {
throw syntaxError("Substring bounds error");
chars[pos] = this.next();
if (this.end()) {
throw this.syntaxError("Substring bounds error");
}
pos += 1;
}
@ -228,7 +229,7 @@ public class JSONTokener {
*/
public char nextClean() throws JSONException {
for (;;) {
char c = next();
char c = this.next();
if (c == 0 || c > ' ') {
return c;
}
@ -251,14 +252,14 @@ public class JSONTokener {
char c;
StringBuffer sb = new StringBuffer();
for (;;) {
c = next();
c = this.next();
switch (c) {
case 0:
case '\n':
case '\r':
throw syntaxError("Unterminated string");
throw this.syntaxError("Unterminated string");
case '\\':
c = next();
c = this.next();
switch (c) {
case 'b':
sb.append('\b');
@ -276,7 +277,7 @@ public class JSONTokener {
sb.append('\r');
break;
case 'u':
sb.append((char)Integer.parseInt(next(4), 16));
sb.append((char)Integer.parseInt(this.next(4), 16));
break;
case '"':
case '\'':
@ -285,7 +286,7 @@ public class JSONTokener {
sb.append(c);
break;
default:
throw syntaxError("Illegal escape.");
throw this.syntaxError("Illegal escape.");
}
break;
default:
@ -307,10 +308,10 @@ public class JSONTokener {
public String nextTo(char delimiter) throws JSONException {
StringBuffer sb = new StringBuffer();
for (;;) {
char c = next();
char c = this.next();
if (c == delimiter || c == 0 || c == '\n' || c == '\r') {
if (c != 0) {
back();
this.back();
}
return sb.toString().trim();
}
@ -329,11 +330,11 @@ public class JSONTokener {
char c;
StringBuffer sb = new StringBuffer();
for (;;) {
c = next();
c = this.next();
if (delimiters.indexOf(c) >= 0 || c == 0 ||
c == '\n' || c == '\r') {
if (c != 0) {
back();
this.back();
}
return sb.toString().trim();
}
@ -350,18 +351,18 @@ public class JSONTokener {
* @return An object.
*/
public Object nextValue() throws JSONException {
char c = nextClean();
char c = this.nextClean();
String string;
switch (c) {
case '"':
case '\'':
return nextString(c);
return this.nextString(c);
case '{':
back();
this.back();
return new JSONObject(this);
case '[':
back();
this.back();
return new JSONArray(this);
}
@ -377,13 +378,13 @@ public class JSONTokener {
StringBuffer sb = new StringBuffer();
while (c >= ' ' && ",:]}/\\\"[{;=#".indexOf(c) < 0) {
sb.append(c);
c = next();
c = this.next();
}
back();
this.back();
string = sb.toString().trim();
if (string.equals("")) {
throw syntaxError("Missing value");
throw this.syntaxError("Missing value");
}
return JSONObject.stringToValue(string);
}
@ -402,11 +403,11 @@ public class JSONTokener {
int startIndex = this.index;
int startCharacter = this.character;
int startLine = this.line;
reader.mark(Integer.MAX_VALUE);
this.reader.mark(Integer.MAX_VALUE);
do {
c = next();
c = this.next();
if (c == 0) {
reader.reset();
this.reader.reset();
this.index = startIndex;
this.character = startCharacter;
this.line = startLine;
@ -417,10 +418,10 @@ public class JSONTokener {
throw new JSONException(exc);
}
back();
this.back();
return c;
}
/**
* Make a JSONException to signal a syntax error.
@ -429,7 +430,7 @@ public class JSONTokener {
* @return A JSONException object, suitable for throwing
*/
public JSONException syntaxError(String message) {
return new JSONException(message + toString());
return new JSONException(message + this.toString());
}
@ -439,7 +440,7 @@ public class JSONTokener {
* @return " at {index} [character {character} line {line}]"
*/
public String toString() {
return " at " + index + " [character " + this.character + " line " +
return " at " + this.index + " [character " + this.character + " line " +
this.line + "]";
}
}