Convertir imbriquée arbitraire, JSON, CSV en Java
Cette question a été posée plusieurs fois mais je n'arrivais pas à trouver la réponse qui résout mon problème.
Je suis en train de convertir imbriquée format JSON au format CSV comme ceci :
La structure JSON est arbitraire et pourrait être n'importe quoi, imbriqués ou non.
Je ne suis pas censée le savoir, c'est une base de données de réponse et j'ai besoin d'exporter cette réponse JSON dans le fichier CSV.
Voici un exemple
D'entrée :
{
"_id": 1,
"name": "Aurelia Menendez",
"scores": [
{
"type": "exam",
"score": 60.06045071030959
},
{
"type": "quiz",
"score": 52.79790691903873
},
{
"type": "homework",
"score": 71.76133439165544
}
]
}
La sortie, je suis à la recherche de :
_id,name,scores.type,scores.score,scores.type,scores.score,scores.type,scores.score
1,Aurelia Menendez,exam,60.06...,quiz,52.79...,homework,71.76..
Ceci est un exemple, il pourrait être tout autre document JSON.
L'idée ici est d'utiliser la notation point dans la colonne CSV nom.
Je l'ai déjà utilisé CDL mais la sortie n'est pas ce que je veux :
_id scores name
1 "[{score:60.06045071030959,type:exam},{score:52.79790691903873,type:quiz},{score:71.76133439165544,type:homework}]" Aurelia Menendez
Alors, comment puis-je convertir des imbriquée JSON, CSV avec la notation point et de manière générique ?
Modifications
Deserialisation du JSON avec Jackson :
ObjectMapper mapper=new ObjectMapper();
JsonNode jsonNode=mapper.readValue(new File("C:\\...\\...\...\\test.json"), JsonNode.class);
Ismail
CDL mais je ne suis pas libre de définir les paramètres afin que je puisse avoir la sortie que je veux.
Avez-vous jamais été confronté à mon problème ?
Avez-vous envisagé d'écrire un peu de code? (Oui, je sais que c'est une éruption chose à proposer.)
Je pense que les formes de cette JSON sont limitées. Analyser les formes de structure JSON, vous pouvez obtenir à partir de la base de données, et de déclarer la java de la classe ou des classes java qui peut refléter cette structure. Et après que l'utilisation GSON ou d'une autre deserializer pour traiter cette structure json.
OriginalL'auteur Ismail Sen | 2014-07-16
Vous devez vous connecter pour publier un commentaire.
La conversion de JSON pour XLS/CSV en Java a ce que vous cherchez.
Fondamentalement, vous avez besoin d'utiliser org.json.CDL pour convertir JSON au format CSV
OriginalL'auteur ahaaman
Commentaires ne sont pas l'endroit idéal pour poster longs réponses, donc je poste ma réponse ici.
Analyser votre JSON et de toutes JSON structures que vous pouvez obtenir à partir de votre base de données. Il devrait y avoir un nombre limité de JSON formes.
Que vous avez analysé votre structure JSON construire une classe/classe de la hiérarchie, qui reflète pleinement cette structure.
Utilisation JSON sérialiseur/deserializer bibliothèque à votre choix, à désérialiser JSON d'un objet java.
Employer StringBuffer/StringBuilder classes, et itérer sur votre objet de l'information, et de construire délimité par des virgules (ou des tabulations) les chaînes de caractères.
Écrire des chaînes que vous avez construit à l'étape précédente pour le fichier.
.
désolé, mais je n'ai aucune expérience avec
Jackson
cadre.\Dans l'étape 4, comment puis-je effectuer une itération sur les éléments de scores de collection ?
scores
est une collection d'objets? mettre en œuvre une boucle qui itère sur cette collection et construit une chaîne à l'aide de StringBuilder ou StringBuffer instance de classe.Dans les Éditions, je désérialiser le JSON en un objet java
jsonNode
. Quand j'essaie de le parcourir, je l'aiCan only iterate over an array or an instance of java.lang.Iterable
.OriginalL'auteur
Comme vous l'avez dit :
Le JSON, CSV conversion ne peut pas être généralisée, car il varie d'un utilisateur à l'autre et dépend également des besoins spécifiques.
Mais encore il y a un bibliothèque json2flat qui tente de l'atteindre. Mais elle peut différer de l'exigence de l'utilisateur. Néanmoins, il vaut la peine d'essayer.
Par exemple pour le JSON donné ci-dessus:
peut être interprété comme suit :
"scores" : [ … ]
, comme peut-être"classes" : [ … ]
ou"societies" : [ … ]
; comment voulez-vous convertir? Ne vous méprenez pas: ce que vous suggérez est raisonnable (et différent des autres réponses) pour les données de l'échantillon, mais la question fait état de "structure JSON est arbitraire ... imbriquées", donc dans l'idéal, votre idée doit être facilement généralisables.tout dépend de l'utilisateur. Comment ils veulent avoir une interprétation du json. Bien pour le JSON j'ai ici un autre exemple ::
Voici l'échantillon que vous avez demandé:
{ "_id": 1, "name": "Aurelia Menendez", "scores": [ { "type": "exam", "score": 60.06045071030959 } ], "classes" : [ { "sub" : "English" } ], "societies" : [ { "socDemo" : "xyz" } ]}
. La sortie de ce JSON sera/_id,/name,/scores/type,/scores/score,/classes/sub,/societies/socDemo 1,"Aurelia Menendez","exam",60.06045071030959,, 1,"Aurelia Menendez",,,"English", 1,"Aurelia Menendez",,,,"xyz"
.OriginalL'auteur skap