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; } }