2016-05-10 3 views
0

Der CodeNur eine json Linie in rjson gelesen wurde

library(rjson) 
url <- 'file.json' 
j <- fromJSON(file=url, method='C') 

gibt es mehr als 1000 Zeilen in der file.json ist, jedoch ist das zurückgegebene Ergebnis eine Liste von 9.

die Datei .json ist

{"reviewerID": "A30TL5EWN6DFXT", "asin": "120401325X", "reviewerName": "christina", "helpful": [0, 0], "reviewText": "They look good and stick good! I just don't like the rounded shape because I was always bumping it and Siri kept popping up and it was irritating. I just won't buy a product like this again", "overall": 4.0, "summary": "Looks Good", "unixReviewTime": 1400630400, "reviewTime": "05 21, 2014"} 
{"reviewerID": "ASY55RVNIL0UD", "asin": "120401325X", "reviewerName": "emily l.", "helpful": [0, 0], "reviewText": "These stickers work like the review says they do. They stick on great and they stay on the phone. They are super stylish and I can share them with my sister. :)", "overall": 5.0, "summary": "Really great product.", "unixReviewTime": 1389657600, "reviewTime": "01 14, 2014"} 
{"reviewerID": "A2TMXE2AFO7ONB", "asin": "120401325X", "reviewerName": "Erica", "helpful": [0, 0], "reviewText": "These are awesome and make my phone look so stylish! I have only used one so far and have had it on for almost a year! CAN YOU BELIEVE THAT! ONE YEAR!! Great quality!", "overall": 5.0, "summary": "LOVE LOVE LOVE", "unixReviewTime": 1403740800, "reviewTime": "06 26, 2014"} 

was ist das Problem? Vielen Dank!

+0

@bgoldst bitte sehen Sie die Hauptfrage, die ich mit einem Beispiel bearbeitet habe. Ich kann nur die erste Zeile der Datei mit dem Code abrufen. – user3329081

Antwort

1

Ihre Datei enthält kein gültiges JSON. Sie haben grundsätzlich drei JSON-Hashes, die direkt nebeneinander sitzen. Die genaue Wahl des Leerraums, der die Werte trennt, spielt keine Rolle. Es ist äquivalent dazu:

{} {} {} 

, die genauso ungültig ist, als ob es drei Grundelemente direkt nebeneinander sitzen:

3 'a' true 

allgemein gesprochen, wenn der Eingang zu einer Funktion ungültig ist, werden alle Wetten sind weg. Es ist wünschenswert, Funktionen fehlerfrei zu schreiben und klare Fehlermeldungen zu geben, die die Art der Ungültigkeit beschreiben, und sehr oft ist dies der Fall, aber das passiert nicht immer. Was in diesem Fall rjson::fromJSON() zu tun scheint, wenn es auf diese Art von ungültigem JSON stößt, besteht darin, den ersten Wert zu analysieren und zurückzugeben und alles andere stillschweigend zu ignorieren. Das ist bedauerlich, aber was können wir tun?

Sie sollten wahrscheinlich untersuchen, wie die Datei generiert wurde, und versuchen, das Problem an diesem Ende zu beheben. Aber wenn Sie eine Lösung hacken wollen, können wir die Zeilen von JSON in einen Zeichenvektor einlesen, sie in Kommas einfügen, Klammertrennzeichen um die resultierende Zeichenfolge einfügen und dann diese Zeichenfolge analysieren, um ein Array von Hashes zu erhalten. Dies funktioniert nur, wenn jeder benachbarte Hash genau eine Zeile in der Datei einnimmt.

fromJSON(paste0('[',paste(collapse=',',readLines(url)),']')); 
## [[1]] 
## [[1]]$reviewerID 
## [1] "A30TL5EWN6DFXT" 
## 
## [[1]]$asin 
## [1] "120401325X" 
## 
## [[1]]$reviewerName 
## [1] "christina" 
## 
## [[1]]$helpful 
## [1] 0 0 
## 
## [[1]]$reviewText 
## [1] "They look good and stick good! I just don't like the rounded shape because I was always bumping it and Siri kept popping up and it was irritating. I just won't buy a product like this again" 
## 
## [[1]]$overall 
## [1] 4 
## 
## [[1]]$summary 
## [1] "Looks Good" 
## 
## [[1]]$unixReviewTime 
## [1] 1400630400 
## 
## [[1]]$reviewTime 
## [1] "05 21, 2014" 
## 
## 
## [[2]] 
## [[2]]$reviewerID 
## [1] "ASY55RVNIL0UD" 
## 
## [[2]]$asin 
## [1] "120401325X" 
## 
## [[2]]$reviewerName 
## [1] "emily l." 
## 
## [[2]]$helpful 
## [1] 0 0 
## 
## [[2]]$reviewText 
## [1] "These stickers work like the review says they do. They stick on great and they stay on the phone. They are super stylish and I can share them with my sister. :)" 
## 
## [[2]]$overall 
## [1] 5 
## 
## [[2]]$summary 
## [1] "Really great product." 
## 
## [[2]]$unixReviewTime 
## [1] 1389657600 
## 
## [[2]]$reviewTime 
## [1] "01 14, 2014" 
## 
## 
## [[3]] 
## [[3]]$reviewerID 
## [1] "A2TMXE2AFO7ONB" 
## 
## [[3]]$asin 
## [1] "120401325X" 
## 
## [[3]]$reviewerName 
## [1] "Erica" 
## 
## [[3]]$helpful 
## [1] 0 0 
## 
## [[3]]$reviewText 
## [1] "These are awesome and make my phone look so stylish! I have only used one so far and have had it on for almost a year! CAN YOU BELIEVE THAT! ONE YEAR!! Great quality!" 
## 
## [[3]]$overall 
## [1] 5 
## 
## [[3]]$summary 
## [1] "LOVE LOVE LOVE" 
## 
## [[3]]$unixReviewTime 
## [1] 1403740800 
## 
## [[3]]$reviewTime 
## [1] "06 26, 2014" 
## 
##