com.jsoniter.IterImplSkip Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jsoniter Show documentation
Show all versions of jsoniter Show documentation
jsoniter (json-iterator) is fast and flexible JSON parser available in Java and Go
package com.jsoniter;
import java.io.IOException;
class IterImplSkip {
static final boolean[] breaks = new boolean[127];
static {
breaks[' '] = true;
breaks['\t'] = true;
breaks['\n'] = true;
breaks['\r'] = true;
breaks[','] = true;
breaks['}'] = true;
breaks[']'] = true;
}
public static final void skip(JsonIterator iter) throws IOException {
byte c = IterImpl.nextToken(iter);
switch (c) {
case '"':
IterImpl.skipString(iter);
return;
case '-':
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
IterImpl.skipUntilBreak(iter);
return;
case 't':
case 'n':
IterImpl.skipFixedBytes(iter, 3); // true or null
return;
case 'f':
IterImpl.skipFixedBytes(iter, 4); // false
return;
case '[':
IterImpl.skipArray(iter);
return;
case '{':
IterImpl.skipObject(iter);
return;
default:
throw iter.reportError("IterImplSkip", "do not know how to skip: " + c);
}
}
// adapted from: https://github.com/buger/jsonparser/blob/master/parser.go
// Tries to find the end of string
// Support if string contains escaped quote symbols.
final static int findStringEnd(JsonIterator iter) {
boolean escaped = false;
for (int i = iter.head; i < iter.tail; i++) {
byte c = iter.buf[i];
if (c == '"') {
if (!escaped) {
return i + 1;
} else {
int j = i - 1;
for (; ; ) {
if (j < iter.head || iter.buf[j] != '\\') {
// even number of backslashes
// either end of buffer, or " found
return i + 1;
}
j--;
if (j < iter.head || iter.buf[j] != '\\') {
// odd number of backslashes
// it is \" or \\\"
break;
}
j--;
}
}
} else if (c == '\\') {
escaped = true;
}
}
return -1;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy