2012-09-16 14 views
5

Podejrzewam, że brakuje mi czegoś oczywistego tutaj, ale jak mogę parsować głęboko zagnieżdżone struktury w R używając RJSONIO?Parsowanie głęboko zagnieżdżonych struktur JSON w R Korzystanie z RJSONIO

Na przykład - załóżmy, że chcemy bezpośrednio odwoływać $ FamilyName w results.data.json$MRData$RaceTable$Races[[1]]$Results[[8]]$Driver jak chwycił stosując następujący fragment:

require(RJSONIO) 
resultsURL='http://ergast.com/api/f1/2012/1/results.json' 
results.data.json=fromJSON(resultsURL) 

RJSONIO wydaje się nie chce analizować dane ..$Results[[i]] jak elementy strukturyzowanych?

+0

@Maiasaura Konwencja stylizacji wszystkich elementów kodu? – psychemedia

+0

@psychmedia yes. Ułatwia identyfikację wszystkich elementów twojego pytania, szczególnie bibliotek. – Maiasaura

Odpowiedz

3
require(RJSONIO) 

somedata1<-list(a=1,b='w') 
fromJSON(toJSON(somedata1)) 
# $a 
# [1] 1 

# $b 
# [1] "w" 

somedata2<-list(a=1,b=2) 
fromJSON(toJSON(somedata2)) 
# a b 
# 1 2 

somedata3<-list(a='v',b='w') 
fromJSON(toJSON(somedata3)) 
# a b 
# "v" "w" 

fromJSON(toJSON(somedata3),simplify=StrictNumeric) 
# $a 
# [1] "v" 

# $b 
# [1] "w" 

fromJSON(toJSON(somedata2),simplify=FALSE) 
# $a 
# [1] 1 

# $b 
# [1] 2 

fromJSON(toJSON(somedata3),simplifyWithNames = FALSE) 
# $a 
# [1] "v" 

# $b 
# [1] "w" 


fromJSON(toJSON(somedata2),simplifyWithNames = FALSE) 
# $a 
# [1] 1 

# $b 
# [1] 2 

z powyższych przykładach domyślnie RJSON upraszcza „collections/tablic jednorodnych elementów skalarnych z wektorami, R”. To uproszczenie można kontrolować za pomocą simplify lub simplifyWithNames. W przykładzie można wykonać jedną z następujących czynności, aby uzyskać dostęp do elementu, który chcesz:

require(RJSONIO) 
resultsURL='http://ergast.com/api/f1/2012/1/results.json' 
results.data.json=fromJSON(resultsURL) 
results.data.json$MRData$RaceTable$Races[[1]]$Results[[8]]$Driver['familyName'] 
# familyName 
# "Pérez" 

results.data.json=fromJSON(resultsURL,simplify=FALSE) 
results.data.json$MRData$RaceTable$Races[[1]]$Results[[8]]$Driver$familyName 
# [1] "Pérez" 

results.data.json=fromJSON(resultsURL,simplify=StrictNumeric) 
results.data.json$MRData$RaceTable$Races[[1]]$Results[[8]]$Driver$familyName 
# [1] "Pérez" 

results.data.json=fromJSON(resultsURL,simplifyWithNames = FALSE) 
results.data.json$MRData$RaceTable$Races[[1]]$Results[[8]]$Driver$familyName 
# [1] "Pérez" 
2

Pakiet jsonlite jest rozwidlenie RJSONIO który próbuje użyć inteligentniejsze mapowanie pomiędzy strukturami R i JSON. Myślę, że to może ułatwić Ci życie:

> x = fromJSON('http://ergast.com/api/f1/2012/1/results.json') 
> x$RaceTable$Races$MRData$Results[[1]]$Driver 
      driverId code             url 
1    button BUT   http://en.wikipedia.org/wiki/Jenson_Button 
2    vettel VET   http://en.wikipedia.org/wiki/Sebastian_Vettel 
3   hamilton HAM   http://en.wikipedia.org/wiki/Lewis_Hamilton 
4    webber WEB    http://en.wikipedia.org/wiki/Mark_Webber 
5    alonso ALO   http://en.wikipedia.org/wiki/Fernando_Alonso 
6   kobayashi KOB   http://en.wikipedia.org/wiki/Kamui_Kobayashi 
7   raikkonen RAI http://en.wikipedia.org/wiki/Kimi_R%C3%A4ikk%C3%B6nen 
8    perez PER  http://en.wikipedia.org/wiki/Sergio_P%C3%A9rez 
9   ricciardo RIC   http://en.wikipedia.org/wiki/Daniel_Ricciardo 
10    resta DIR   http://en.wikipedia.org/wiki/Paul_di_Resta 
11    vergne VER http://en.wikipedia.org/wiki/Jean-%C3%89ric_Vergne 
12   rosberg ROS    http://en.wikipedia.org/wiki/Nico_Rosberg 
13   maldonado MAL   http://en.wikipedia.org/wiki/Pastor_Maldonado 
14    glock GLO    http://en.wikipedia.org/wiki/Timo_Glock 
15    pic PIC    http://en.wikipedia.org/wiki/Charles_Pic 
16  bruno_senna SEN    http://en.wikipedia.org/wiki/Bruno_Senna 
17    massa MAS    http://en.wikipedia.org/wiki/Felipe_Massa 
18   kovalainen KOV  http://en.wikipedia.org/wiki/Heikki_Kovalainen 
19    petrov PET   http://en.wikipedia.org/wiki/Vitaly_Petrov 
20 michael_schumacher MSC  http://en.wikipedia.org/wiki/Michael_Schumacher 
21   grosjean GRO   http://en.wikipedia.org/wiki/Romain_Grosjean 
22   hulkenberg HUL  http://en.wikipedia.org/wiki/Nico_H%C3%BClkenberg 
23    rosa DLR   http://en.wikipedia.org/wiki/Pedro_de_la_Rosa 
24  karthikeyan KAR  http://en.wikipedia.org/wiki/Narain_Karthikeyan 
    givenName familyName dateOfBirth nationality 
1  Jenson  Button 1980-01-19  British 
2 Sebastian  Vettel 1987-07-03  German 
3  Lewis Hamilton 1985-01-07  British 
4  Mark  Webber 1976-08-27 Australian 
5 Fernando  Alonso 1981-07-29  Spanish 
6  Kamui Kobayashi 1986-09-13 Japanese 
7  Kimi Räikkönen 1979-10-17  Finnish 
8  Sergio  Pérez 1990-01-26  Mexican 
9  Daniel Ricciardo 1989-07-01 Australian 
10  Paul di Resta 1986-04-16 Scottish 
11 Jean-Éric  Vergne 1990-04-25  French 
12  Nico  Rosberg 1985-06-27  German 
13 Pastor Maldonado 1985-03-09 Venezuelan 
14  Timo  Glock 1982-03-18  German 
15 Charles   Pic 1990-02-15  French 
16  Bruno  Senna 1983-10-15 Brazilian 
17 Felipe  Massa 1981-04-25 Brazilian 
18 Heikki Kovalainen 1981-10-19  Finnish 
19 Vitaly  Petrov 1984-09-08  Russian 
20 Michael Schumacher 1969-01-03  German 
21 Romain Grosjean 1986-04-17  French 
22  Nico Hülkenberg 1987-08-19  German 
23  Pedro de la Rosa 1971-02-24  Spanish 
24 Narain Karthikeyan 1977-01-14  Indian 
Powiązane problemy