我使用傑克遜從JSON inputStream
,它看起來像下面的解析JSON:解析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:流媒體API,數據綁定和樹模型。哪一個適合我的目的?
我怎樣纔能有效地解析這個JSON與傑克遜?我如何跳過這18個元素並跳到下一個陣列以獲得更好的性能?
編輯:(解決方案)
Jackson
和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();
與GSON好運的文件,這是一個像樣的圖書館。然而,我並沒有看到wrt'skipValue()' - Jackson有'skipChildren()'這樣做,跳過了整個邏輯值(對於結構化值由多個標記組成)。 – StaxMan