Je reçois le sentiment que la réponse pourrait être une duplicata de ceci: Jackson - Json à Pojo avec plusieurs entrées mais je pense que la question est suffisamment différente. Aussi, j'utilise une liaison de données brutes plutôt que la liaison complète de données.
Donc, comme l'intérêt de cette question, j'ai plusieurs objets dans un fichier et j'essaie de les transformer en pojos et de les transformer dans une base de données de ma conception afin que je puisse accéder aux données rapidement plutôt que lentement. P>
Les fichiers ici sont dans l'ordre des dizaines de GB, avec jusqu'à des millions d'objets dans chaque fichier. Quoi qu'il en soit, voici ce que j'ai jusqu'à présent: p> et cela fonctionne bien pour imprimer l'élément de barre du premier objet de FOO, mais j'ai besoin d'un moyen de se déplacer à tous les éléments. D'une manière qui ne mangera pas toute ma mémoire. p> merci. p> p>
3 Réponses :
Utilisez cet exemple de code pour voir l'idée de base.
Et votre fichier représente une liste unique d'objets JSON (ce qui ne fait qu'un objet dans son ensemble), ou est-ce juste la concaténation des objets JSON (ce qui vous permettrait de les lire un par un)?
Ne sachant pas trop sur Json, je pense que ce dernier. La structure de fichier est quelque chose comme: {bla bla bla} {bla bla bla bla} {etc}
Cela "fonctionne" mais semble causer plus de problèmes que ce qu'il résoue depuis que je ne sais jamais quels types j'ai (il y a des tableaux avec plus d'objets dans les objets) que je devrai probablement poser une nouvelle question à propos de.
@Marko content que vous ayez compris une façon de le faire, en supposant que les types soient les mêmes. Oui, je sais que cela peut être fait pour travailler, avoir beaucoup d'expérience avec Jackson; Mais le diable est en détail, c'est-à-dire que beaucoup de petites choses peuvent faire une fausse fermeture de WRT du ruisseau. Une chose importante est que l'on doit utiliser le même JSONPARSER CODE>, comme autrement, on lira et un bloc tamponneur rempli d'entrée; Et ce contenu tamponné sera manquant si des analyseurs distincts sont construits.
@Knyght Vous pouvez également lire des choses comme objet code> ou
jsonnode code> (modèle d'arborescence) au lieu de
mappe code>; et utilisez également
objectmapper.convertvalue (carte, autretype.class code> pour faire des conversions sur le type réel de manière dynamique.
Cela devient un peu long, donc je vais commencer une nouvelle question, mais pour l'instant cette réponse fonctionne au moins.
Vous n'avez pas à choisir entre le streaming ( ou, appelez JSONPARSER code>) et
ObjectMapper code>, faites les deux!
Traverser un peu avec analyseur, mais appelle ensuite
jsonparser.readvalues (mytype.class) code> pour lier l'objet JSON individuel. P>
ObjectMapper code> 'S
ReadValue () code> Méthode qui passe JSONPARSER aux points appropriés. Ou utilisez
objectmapper.reader (type.class) .readvalues () code> et itérer de cette façon. P>
+1 pour utiliser les deux! J'utilise le streaming + la liaison de données et il est excellent en termes de simplicité et d'utilisation de la mémoire.
En supposant que vous disposez d'un tableau en enveloppant vos objets, créez un JSONPARSER, puis appelle readvaluesas code> avec le type approprié. Cela vous donne un
itérateur code> avec tous vos objets qui se lit dans le fichier lorsque vous consommez les objets. P>