我在用Jackson从 json 解析 JSONinputStream
如下所示:
[
[ 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 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 的模型:流媒体API, 数据绑定 and 树模型。哪一种适合我的目的?
我怎样才能用 Jackson 有效地解析这个 json ?如何跳过这 18 个元素并跳转到下一个数组以获得更好的性能?
编辑:(解决方案)
Jackson
and GSon
两者几乎以相同的机制工作(增量模式,因为内容是增量读取和写入的),我正在切换到GSON
因为它有一个功能skipValue()
(与名字相当合适)。虽然杰克逊的nextToken()
会像skipValue()
, GSON
对我来说似乎更灵活。感谢@Kowser兄弟的推荐,我之前就知道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();