Skip to content

Commit e84e78d

Browse files
author
jimeng
committed
fix
1 parent e492626 commit e84e78d

File tree

3 files changed

+7
-22
lines changed

3 files changed

+7
-22
lines changed

src/jmh/java/org/simdjson/ParseAndSelectFixPathBenchMark.java

+1-6
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
package org.simdjson;
22

33
import java.io.IOException;
4-
import java.util.HashSet;
54
import java.util.Iterator;
6-
import java.util.Set;
75
import java.util.concurrent.TimeUnit;
86

9-
import org.checkerframework.checker.units.qual.A;
107
import org.openjdk.jmh.annotations.Benchmark;
118
import org.openjdk.jmh.annotations.BenchmarkMode;
129
import org.openjdk.jmh.annotations.Mode;
@@ -15,8 +12,6 @@
1512
import org.openjdk.jmh.annotations.Scope;
1613
import org.openjdk.jmh.annotations.State;
1714

18-
import com.alibaba.fastjson2.JSON;
19-
import com.alibaba.fastjson2.JSONObject;
2015
import com.fasterxml.jackson.databind.JsonNode;
2116
import com.fasterxml.jackson.databind.ObjectMapper;
2217
import com.fasterxml.jackson.databind.node.ArrayNode;
@@ -30,7 +25,7 @@ public class ParseAndSelectFixPathBenchMark {
3025
private byte[] buffer;
3126
private final SimdJsonParser parser = new SimdJsonParser();
3227
private final ObjectMapper objectMapper = new ObjectMapper();
33-
private final SimdJsonParser2 parser2 = new SimdJsonParser2(
28+
private final SimdJsonParserWithFixPath parser2 = new SimdJsonParserWithFixPath(
3429
"statuses.0.user.default_profile", "statuses.0.user.screen_name",
3530
"statuses.1.user.default_profile", "statuses.1.user.screen_name",
3631
"statuses.2.user.default_profile", "statuses.2.user.screen_name",

src/main/java/org/simdjson/SimdJsonParser2.java renamed to src/main/java/org/simdjson/SimdJsonParserWithFixPath.java

+4-14
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import lombok.Data;
77
import lombok.RequiredArgsConstructor;
88

9-
public class SimdJsonParser2 {
9+
public class SimdJsonParserWithFixPath {
1010

1111
@Data
1212
@RequiredArgsConstructor
@@ -33,9 +33,8 @@ static class JsonNode {
3333
// every time json string is processed, currentVersion will be incremented by 1
3434
private long currentVersion = 0;
3535
// pruning, when alreadyProcessedCols == NUM
36-
private long parseCols = 0;
3736

38-
public SimdJsonParser2(String... args) {
37+
public SimdJsonParserWithFixPath(String... args) {
3938
parser = new SimdJsonParser();
4039
expectParseCols = args.length;
4140
row = new JsonNode[expectParseCols];
@@ -66,7 +65,6 @@ public String[] parse(byte[] buffer, int len) {
6665
if (buffer == null || buffer.length == 0) {
6766
return emptyResult;
6867
}
69-
this.parseCols = 0;
7068
this.currentVersion++;
7169
this.ptr = root;
7270
this.buffer = buffer;
@@ -100,9 +98,6 @@ private String parseField() {
10098
}
10199

102100
private void parseElement(String expectFieldName) {
103-
if (parseCols >= expectParseCols) {
104-
return;
105-
}
106101
// if expectFieldName is null, parent is map, else is list
107102
if (expectFieldName == null) {
108103
expectFieldName = parseField();
@@ -123,7 +118,6 @@ private void parseElement(String expectFieldName) {
123118
default -> {
124119
ptr.setValue(skip(true));
125120
ptr.setVersion(currentVersion);
126-
++parseCols;
127121
}
128122
}
129123
ptr = ptr.getParent();
@@ -133,12 +127,11 @@ private void parseMap() {
133127
if (ptr.getChildren() == null) {
134128
ptr.setValue(skip(true));
135129
ptr.setVersion(currentVersion);
136-
++parseCols;
137130
return;
138131
}
139132
ptr.setStart(bitIndexes.peek());
140133
bitIndexes.advance();
141-
while (bitIndexes.hasNext() && buffer[bitIndexes.peek()] != '}' && parseCols <= expectParseCols) {
134+
while (bitIndexes.hasNext() && buffer[bitIndexes.peek()] != '}') {
142135
parseElement(null);
143136
if (buffer[bitIndexes.peek()] == ',') {
144137
bitIndexes.advance();
@@ -148,7 +141,6 @@ private void parseMap() {
148141
if (ptr.isLeaf()) {
149142
ptr.setValue(new String(buffer, ptr.getStart(), ptr.getEnd() - ptr.getStart() + 1));
150143
ptr.setVersion(currentVersion);
151-
++parseCols;
152144
}
153145
bitIndexes.advance();
154146
}
@@ -157,13 +149,12 @@ private void parseList() {
157149
if (ptr.getChildren() == null) {
158150
ptr.setValue(skip(true));
159151
ptr.setVersion(currentVersion);
160-
++parseCols;
161152
return;
162153
}
163154
ptr.setStart(bitIndexes.peek());
164155
bitIndexes.advance();
165156
int i = 0;
166-
while (bitIndexes.hasNext() && buffer[bitIndexes.peek()] != ']' && parseCols <= expectParseCols) {
157+
while (bitIndexes.hasNext() && buffer[bitIndexes.peek()] != ']') {
167158
parseElement("" + i);
168159
if (buffer[bitIndexes.peek()] == ',') {
169160
bitIndexes.advance();
@@ -174,7 +165,6 @@ private void parseList() {
174165
if (ptr.isLeaf()) {
175166
ptr.setValue(new String(buffer, ptr.getStart(), ptr.getEnd() - ptr.getStart() + 1));
176167
ptr.setVersion(currentVersion);
177-
++parseCols;
178168
}
179169
bitIndexes.advance();
180170
}

src/test/java/org/simdjson/JsonMultiValueParsingTest.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ public class JsonMultiValueParsingTest {
99
@Test
1010
public void testParseMultiValue() {
1111
byte[] json = toUtf8("{\"field1\":{\"field2\":\"value2\",\"field3\":3},\"field4\":[\"value4\",\"value5\"],\"field5\":null}");
12-
SimdJsonParser2 parser = new SimdJsonParser2("field1.field2", "field1.field3", "field4", "field4.0", "field5");
12+
SimdJsonParserWithFixPath parser = new SimdJsonParserWithFixPath("field1.field2", "field1.field3", "field4", "field4.0", "field5");
1313
String[] result = parser.parse(json, json.length);
1414
assertThat(result[0]).isEqualTo("value2");
1515
assertThat(result[1]).isEqualTo("3");
@@ -21,7 +21,7 @@ public void testParseMultiValue() {
2121
@Test
2222
public void testNonAsciiCharacters() {
2323
byte[] json = toUtf8("{\"ąćśńźż\": 1, \"\\u20A9\\u0E3F\": 2, \"αβγ\": 3, \"😀abc😀\": 4}");
24-
SimdJsonParser2 parser = new SimdJsonParser2("ąćśńźż", "\\u20A9\\u0E3F", "αβγ", "😀abc😀");
24+
SimdJsonParserWithFixPath parser = new SimdJsonParserWithFixPath("ąćśńźż", "\\u20A9\\u0E3F", "αβγ", "😀abc😀");
2525
// when
2626
String[] result = parser.parse(json, json.length);
2727
// then

0 commit comments

Comments
 (0)