我正在使用Jackson从 jsoninputStream
中解析 JSON,如下所示:
[
[ 36,
100,
"The 3n + 1 problem",
56717,
0,
1000000000,
0,
6316,
0,
0,
88834,
0,
45930,
0,
46527,
5209,
200860,
3597,
149256,
3000,
1
],
[
........
],
[
........
],
.....// and almost 5000 arrays like above
]
这是原始提要链接:http ://uhunt.felix-halim.net/api/p
我想解析它并只保留每个数组的前 4 个元素并跳过其他 18 个元素。
36
100
The 3n + 1 problem
56717
到目前为止我尝试过的代码结构:
while (jsonParser.nextToken() != JsonToken.END_ARRAY) {
jsonParser.nextToken(); // '['
while (jsonParser.nextToken() != JsonToken.END_ARRAY) {
// I tried many approaches here but not found appropriate one
}
}
由于这个提要非常大,我需要以更少的开销和内存有效地执行此操作。还有三种模型来处理 JSON:Streaming API、Data Binding和Tree Model。哪一个适合我的目的?
如何使用 Jackson 有效地解析这个 json?如何跳过这 18 个元素并跳转到下一个数组以获得更好的性能?
编辑:(解决方案)
Jackson
并且GSon
两者几乎都以相同的机制工作(增量模式,因为内容是增量读取和写入的),我正在切换到GSON
它具有功能skipValue()
(非常适合名称)。尽管杰克逊的nextToken()
工作方式对我skipValue()
来说GSON
似乎更灵活。感谢@Kowser bro 的推荐,我之前了解过GSON,但不知何故忽略了它。这是我的工作代码:
reader.beginArray();
while (reader.hasNext()) {
reader.beginArray();
int a = reader.nextInt();
int b = reader.nextInt();
String c = reader.nextString();
int d = reader.nextInt();
System.out.println(a + " " + b + " " + c + " " + d);
while (reader.hasNext())
reader.skipValue();
reader.endArray();
}
reader.endArray();
reader.close();