2016-08-02 7 views
0

Ich bin neu zu manipulieren JSON-Arrays in R. Wenn ich ein JSON-Array mit R-Paket jsonlite zu einer .JSON-Datei mit dem untenstehenden Code schreiben, bekomme ich Das gesamte JSON-Array wird in der ersten Zeile dieser Datei gedruckt (reg ist ein data.frame).r - jsonlite fügen Wagenrücklauf am Ende der JSON-Array "Elternelemente"

rownames(reg) <- NULL 
write(toJSON(reg), file = "test.json") 

Ich möchte in der Lage sein, einen Wagenrücklauf hinzuzufügen, „\ n“ am Ende jedes Haupt („parent“) Element in der verschachtelten Hierarchie, so anstatt es sieht aus wie die unten:

[{"val":"ID1","prop":{"Sub":{"val":"foo"}}, 
{"val":"ID2","prop":{"Sub":{"val":"bar"}}] 

statt:

[{"val":"ID1","prop":{"Sub":{"val":"foo"}},{"val":"ID2","prop":{"Sub":{"val":"bar"}}] 

Kann mir jemand helfen?

Hinweis: Ich möchte nicht das "schöne" Layout. Ich möchte eine Zeile pro Elternelement/alle untergeordneten Eigenschaften.

Hier ist ein Beispiel data.frame

reg <- data.frame(value=c("ID1", "ID2", "ID3"), properties.Subject.value=c("http://example.org/ID1", "http://example.org/ID2", "http://example.org/ID3"), properties.Subject.properties.value=c("http://example.org/xID1", "http://example.org/xID2", "http://example.org/xID3")) 
value properties.Subject.value properties.Subject.properties.value 
ID1  http://example.org/ID1 http://example.org/xID1 
ID2  http://example.org/ID2 http://example.org/xID2 
ID3  http://example.org/ID3 http://example.org/xID3 
+0

In "schreiben" heißt es, es gibt ein Sep-Argument. Sie könnten versuchen, 'sep =" \ n "' hinzuzufügen, aber ich bin mir nicht sicher, ob es funktioniert. – lmo

+0

Ich habe Ihre Anforderung übersehen, dass Sie kein schönes Layout wollen. Daher gelöschte Antwort. Können Sie einen Beispieldatenrahmen hinzufügen? – user5249203

+0

Datenrahmen Beispiel hinzugefügt! – areyoujokingme

Antwort

0

Wie pro Ihre Anforderungen der neuen Linie denke ich stream_out funktionieren sollte.

require(jsonlite) 
output <- file("test.json") 
stream_out(head(mtcars), con = output, verbose = TRUE) 

Ausgang

{"mpg":21,"cyl":6,"disp":160,"hp":110,"drat":3.9,"wt":2.62,"qsec":16.46,"vs":0,"am":1,"gear":4,"carb":4,"_row":"Mazda RX4"} 
{"mpg":21,"cyl":6,"disp":160,"hp":110,"drat":3.9,"wt":2.875,"qsec":17.02,"vs":0,"am":1,"gear":4,"carb":4,"_row":"Mazda RX4 Wag"} 
{"mpg":22.8,"cyl":4,"disp":108,"hp":93,"drat":3.85,"wt":2.32,"qsec":18.61,"vs":1,"am":1,"gear":4,"carb":1,"_row":"Datsun 710"} 
{"mpg":21.4,"cyl":6,"disp":258,"hp":110,"drat":3.08,"wt":3.215,"qsec":19.44,"vs":1,"am":0,"gear":3,"carb":1,"_row":"Hornet 4 Drive"} 
{"mpg":18.7,"cyl":8,"disp":360,"hp":175,"drat":3.15,"wt":3.44,"qsec":17.02,"vs":0,"am":0,"gear":3,"carb":2,"_row":"Hornet Sportabout"} 
{"mpg":18.1,"cyl":6,"disp":225,"hp":105,"drat":2.76,"wt":3.46,"qsec":20.22,"vs":1,"am":0,"gear":3,"carb":1,"_row":"Valiant"} 

?stream_out

Weil riesige JSON-Strings Parsen schwierig und ineffizient ist, ist JSON-Streaming mit Linien von minified JSON Aufzeichnungen gemacht, auch bekannt als ndjson. Das ist ziemlich Standard: JSON-Datenbanken wie Dat oder MongoDB verwenden das gleiche Format zum Importieren/Exportieren von Datensätzen. Beachten Sie, dass dies bedeutet, dass der Gesamtstrom kombiniert kein gültiger JSON ist; nur die einzelnen Zeilen sind. Beachten Sie außerdem, dass, da Zeilenumbrüche als Trennzeichen verwendet werden, nicht verschönertes JSON zulässig ist: Die JSON-Zeilen müssen minimiert werden. In dieser Hinsicht unterscheidet sich das Format ein wenig von jSON und toJSON, wobei alle Zeilen Teil einer einzelnen JSON-Struktur mit optionalen Zeilenumbrüchen sind.