2014-12-11 18 views
5

Ich habe Probleme mit einem sehr fiesen verschachtelten JSON.Parse verschachtelte JSON zu Datenrahmen in R

Das Format ist wie dieser

{ 
    "matches": [ 
    { 
     "matchId": 1, 
     "region": "BR", 
     "participants": [ 
     { 
      "participantId": 0, 
      "teamId": 200, 
     "stats": { 
      "winner": true, 
      "champLevel": 16, 
      "item0": 3128, 
      } 
     { 
     "matchId": 2, 
     "region": "BR", 
     "participants": [ 
     { 
      "participantId": 0, 
      "teamId": 201, 
     "stats": { 
      "winner": false, 
      "champLevel": 18, 
      "item0": 3128, 
      "item1": 3157, 
      "item1": 3158, 
      } 

Wie Sie im zweiten Spiel die Anzahl der Elemente erhöht, aber in den Datenrahmen der ersten Reihe werden die gleichen collumns sehen:

MatchId region ... stats.winner stats.champLevel stats.item0 stats.item1 stats.item2 
1   BR   TRUE   16     3128   1  BR 
1   BR   TRUE   16     3128   3157  3158 

Sehen Sie die erste Reihe ist kleiner als die zweite, so recyceln die Werte ...

Wenn Sie die vollständigen Daten möchten, können Sie es unter: http://pastebin.com/HQDf2ase

Wie kann ich die json zu data.frame analysiert:

fehlenden oder die Elemente des Json und wandeln es in einem Datenrahmen

matchData.i <- lapply(json.matchData$matches, function(x){ unlist(x)}) 

in Datenrahmen Trans

matchData <- do.call("rbind", matchData.i) 
matchData <- as.data.frame(matchData) 

Aber der Datenrahmen ist durcheinander, weil einige Felder NA sein sollten, aber sie sind mit WRON gefüllt g Werte.

Antwort

4

Ich denke, mit der plyrrbind.fill() Funktion wäre hier hilfreich. Wie über diese

library(plyr) 
matchData <- rbind.fill(lapply(matchData.i, 
    function(x) do.call("data.frame", as.list(x)) 
)) 

die lapply() Bit ist die Zwischen Listen in data.frames zu drehen, die rbind.fill erfordert.