J'utilise Jackson pour analyser JSON d'un JSON inputStream
qui ressemble à ce qui suit:Parsing JSON avec Jackson
[
[ 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
]
Ceci est le lien d'alimentation d'origine: http://uhunt.felix-halim.net/api/p
Je veux analyser et Ne conservez que les 4 premiers éléments de chaque tableau et ignorez les 18 autres éléments.
36
100
The 3n + 1 problem
56717
la structure du code, je l'ai essayé jusqu'à présent:
while (jsonParser.nextToken() != JsonToken.END_ARRAY) {
jsonParser.nextToken(); // '['
while (jsonParser.nextToken() != JsonToken.END_ARRAY) {
// I tried many approaches here but not found appropriate one
}
}
Comme ce flux est assez grand, je dois le faire efficacement avec moins de frais généraux et de la mémoire. Il existe également trois modèles pour traiter JSON: Streaming API, Liaison de données et Arbre Modèle. Lequel est approprié pour mon but?
Comment est-ce que je peux analyser ce json efficacement avec Jackson? Comment puis-je sauter ces 18 éléments et passer au tableau suivant pour de meilleures performances?
Edit: (Solution)
Jackson
et GSon
les deux œuvres, presque dans le même mécanisme (mode incrémental, étant donné que le contenu est lu et écrit progressivement), je suis le passage à GSON
car il a une fonction skipValue()
(assez approprié avec le nom). Bien que nextToken()
de Jackson fonctionnera comme skipValue()
, GSON
semble plus flexible pour moi. Merci frère @Kowser pour sa recommandation, je suis venu à connaître GSON avant mais en quelque sorte ignoré. Ceci est mon code de travail:
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();
Bonne chance avec GSON, c'est une bibliothèque décente. Cependant, je ne vois pas le point de 'skipValue()' - Jackson a 'skipChildren()' qui fait la même chose, en sautant toute la valeur logique (qui pour les valeurs structurées consiste en plusieurs jetons). – StaxMan