2016-08-08 12 views
0

Ich arbeite derzeit mit einer TXT-Datei, die mehrere JSON-Objekte aus einem API-Aufruf enthält. Ich suche nach einer Möglichkeit, alle diese Objekte in eine CSV-Datei zu analysieren. In der Vergangenheit war es mir möglich, ein JSON-Objekt in eine CSV-Datei umzuwandeln, aber ich bin mir nicht sicher, wie es für mehrere JSON-Objekte funktioniert.Analysieren mehrerer JSON-Objekte in einer CSV-Datei mit Ruby

Beispiel JSON:

[{"field1":["value1"], "field2": ["value2"]}] 
[{"field1":["value1"], "field2": ["value2"]}] 
[{"field1":["value1"], "field2": ["value2"]}] 

Der Code, den ich zur Zeit bin mit JSON in eine CSV schieben unten, obwohl es nur auf einem JSON-Objekt scheint zu funktionieren. Was ich glaube, ich brauche eine Art Schleife, die jedes Objekt durchstößt und dann erneut schleift.

require 'csv' 
require 'json' 

CSV.open("sample.csv", "w") do |csv| 
csv << ["field1", 
"field2" 
] 
    JSON.parse(File.open("json.txt").read).each do |hash| #open json to parse 

    csv << hash.values 

    end 
end 

Kann jemand mir irgendwelche Vorschläge geben? Ich habe Lösungen für das Parsen von mehreren Objekten gefunden, aber keine, die mir mit dem CSV-Teil wirklich helfen würden.

+0

hinzufügen Was ist die Ausgabe gerade jetzt? Es scheint, als müssten Sie Werte auspacken. Versuchen Sie hash.values.flatten, auch Hash sollte ein Array sein, also müssen Sie auch den Wert herausnehmen. –

+0

Sie haben eine Datei mit mehreren JSON-Dokumenten. Wenn Ihre Datei, wie in den Beispieldaten, in jeder Zeile ein einzelnes JSON-Dokument enthält, verwenden Sie 'foreach' anstelle von' read' und verarbeiten Sie jede Zeile separat. Wenn Sie der Autor des JSON sind, sollten Sie die Ausgabe so korrigieren, dass sie richtiges JSON erzeugt, das ein einzelnes Array von Hashes sein sollte (natürlich verschlüsselt in JSON). Nachdem Sie eine Zeile analysiert haben, übergeben Sie sie bei Bedarf an CSV. –

+0

@IvanYouroff im Moment kann der Code, den ich verwende, erfolgreich eine CSV-Datei von einem JSON-Objekt erstellen. –

Antwort

0
require 'csv' 
require 'json' 

CSV.open("sample.csv", "w") do |csv| 
    csv << ["field1", "field2"] 
    File.open("json.txt").each do |line| 
    csv << JSON.parse(line).first.values.flatten 
    end 
end 

Obwohl dies nicht wirklich sicher Formatänderungen unter Berücksichtigung, so würde ich einige Validierung

Verwandte Themen