forked from json-iterator/java
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathIterImplSkip.java
More file actions
89 lines (83 loc) · 2.62 KB
/
IterImplSkip.java
File metadata and controls
89 lines (83 loc) · 2.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
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;
}
}