Konvertieren Sie beliebig verschachtelte JSON, CSV-Format in Java
Diese Frage wurde schon oft gefragt, aber ich konnte nicht die Antwort finden, die das behebt mein Problem.
Ich versuche zu konvertieren verschachtelte JSON-format in das CSV-format wie diesem :
Den JSON-Struktur ist beliebig und könnte alles sein, verschachtelt oder nicht.
Bin ich nicht angenommen zu wissen, ist es eine Datenbank zu beantworten und ich brauche zu exportieren, diese JSON-Antwort in das CSV-Datei.
Hier ist ein Beispiel
Eingang :
{
"_id": 1,
"name": "Aurelia Menendez",
"scores": [
{
"type": "exam",
"score": 60.06045071030959
},
{
"type": "quiz",
"score": 52.79790691903873
},
{
"type": "homework",
"score": 71.76133439165544
}
]
}
Den Ausgang, ich bin auf der Suche nach :
_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..
Dies ist ein Beispiel, es hätte auch jede andere JSON-Dokument.
Die Idee hier ist, um die punktierte notation verwenden, die in der CSV-Spaltennamen.
Hab ich auch schon benutzt CDL, aber die Ausgabe ist nicht das, was ich will :
_id scores name
1 "[{score:60.06045071030959,type:exam},{score:52.79790691903873,type:quiz},{score:71.76133439165544,type:homework}]" Aurelia Menendez
Also, wie kann ich konvertieren verschachtelten JSON, CSV mit dot-notation und in einer generischen Art und Weise ?
Bearbeitungen
Deserialisation der JSON mit Jackson :
ObjectMapper mapper=new ObjectMapper();
JsonNode jsonNode=mapper.readValue(new File("C:\\...\\...\...\\test.json"), JsonNode.class);
Ismail
- Gibt es irgendetwas, was Sie versucht haben?
- CDL, aber ich bin nicht frei, um Parameter einzustellen, so kann ich die Ausgabe haben möchte ich.
- Kennen Sie mein Problem ?
- Haben Sie sich überlegt tatsächlich einige code schreiben? (Ja, ich weiß, das ist ein Hautausschlag, was zu empfehlen.)
- Ja. Ich habe versucht mit CDL,OpenCSV,Jackson und GSON.
- bitte aktualisieren Sie Ihre Frage und geben an, dass JSON-Struktur nicht vordefiniert, und Sie können JSON mit beliebiger Struktur, und Sie müssen, um es zu verarbeiten.
- Hinzugefügt das, was Sie gefragt.
- Ich denke, dass die Formen der JSON sind begrenzt. Analysieren Formen der JSON-Struktur, die Sie bekommen können aus der Datenbank, und deklarieren Sie die java-Klassen oder java-Klassen, die können die Struktur darzustellen. Und dann benutze GSON oder anderen deserializer für die Bearbeitung dieses json-Struktur.
- Was ist mit Java?
- Rafael ist richtig, es sind Regeln für die Struktur von json-formatierten text. Meine $0,02 ist, dass Sie gehen aus einem strukturierten Dokument, wie json oder xml in eine flache csv-Datei verliert Informationen im Allgemeinen. Ich glaube nicht, dass es eine konsistente Methode zur Darstellung von beliebigen json in eine csv-Datei. Sie werden Schwierigkeiten haben, die übersetzung zwischen den beiden.
- Ich habe Deserialisieren der JSON-und ich habe Hinzugefügt die Ausgabe der Bearbeitungen
- Ich habe meine Antwort, überprüfen Sie es bitte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Konvertieren von JSON, XLS/CSV-Format in Java hat, was Sie suchen.
Im Grunde, müssen Sie die Verwendung von org.json.CDL konvertieren von JSON, CSV-format
Kommentare sind nicht bequem Ort zum posten longs Antworten, deshalb poste ich meine Antwort hier.
Analysieren Sie Ihre JSON und alle möglichen JSON-Strukturen, die Sie bekommen können aus Ihrer Datenbank. Es sollte nur eine begrenzte Anzahl von JSON-Formen.
Als Sie analysiert haben Ihre JSON-Struktur bauen Sie eine Klasse/Klassen-Hierarchie, die vollständig reflektiert diese Struktur.
Verwenden JSON-serializer/deserializer-Bibliothek bei Ihrer Wahl, zu Deserialisieren von JSON zu java-Objekt.
Beschäftigen StringBuffer/StringBuilder-Klassen, und Durchlaufen Sie Ihre Objekt Informationen ein, und bauen ein Komma getrennt (oder tab-delimited) strings.
Schreiben Sie Zeichenfolgen, die Sie gebaut haben, die auf der vorherigen Stufe der Datei.
Das ist es.
Jackson
Rahmen.\scores
ist eine Sammlung von Objekten? implementieren Sie eine Schleife, dass durchläuft die Kollektion und baut einen string mit StringBuilder oder StringBuffer-Klasse-Instanz.jsonNode
. Wenn ich versuche zu Durchlaufen, ich habeCan only iterate over an array or an instance of java.lang.Iterable
.iterate
ich meine, machen Sie eine Schleife, Zyklus, um einen Satz von Objekten. Wenn Sie das Kontrollkästchen JsonNode javadoc finden Sie alle notwendigen Methoden, um diese Werte.Wie Sie sagte :
Den JSON, CSV Konvertierung kann nicht verallgemeinert werden, da es variiert von Anwender zu Anwender und hängt auch spezifische Anforderungen.
Aber immer noch gibt ' s ein Bibliothek json2flat, die versucht, es zu erreichen. Aber dabei kann es zu Abweichungen von der Anforderung des Benutzers. Noch ein Versuch ist es Wert.
Zum Beispiel für die JSON oben gegeben:
kann wie folgt interpretiert werden :
"scores" : [ … ]
wie vielleicht"classes" : [ … ]
oder"societies" : [ … ]
; wie würden Sie konvertieren? Versteh mich nicht falsch: was Sie vorschlagen, ist sinnvoll (und von anderen Antworten) für die sample-Daten, aber die Frage ist-Zustand "JSON-Struktur ist beliebig ... verschachtelt", so dass im Idealfall Ihre Idee sollte leicht verallgemeinerbare.{ "_id": 1, "name": "Aurelia Menendez", "scores": [ { "type": "exam", "score": 60.06045071030959 } ], "classes" : [ { "sub" : "English" } ], "societies" : [ { "socDemo" : "xyz" } ]}
. Die Ausgabe dieses JSON wird/_id,/name,/scores/type,/scores/score,/classes/sub,/societies/socDemo 1,"Aurelia Menendez","exam",60.06045071030959,, 1,"Aurelia Menendez",,,"English", 1,"Aurelia Menendez",,,,"xyz"
.