2012-09-16 61 views
5

Tôi nghi ngờ tôi đang thiếu một số thứ rõ ràng ở đây, nhưng làm cách nào để phân tích cú pháp cấu trúc lồng nhau trong R bằng cách sử dụng RJSONIO?Phân tích cú pháp cấu trúc JSON được lồng sâu trong R Sử dụng RJSONIO

Ví dụ - cho rằng tôi trực tiếp muốn tham khảo $ familyName trong results.data.json$MRData$RaceTable$Races[[1]]$Results[[8]]$Driver như đã lấy thông qua các đoạn mã sau:

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

RJSONIO không xuất hiện để muốn phân tích các dữ liệu ..$Results[[i]] như các yếu tố cấu trúc?

+0

@Maiasaura Vì vậy, quy ước để tạo kiểu cho tất cả các phần tử mã? – psychemedia

+0

@psychmedia yes. Giúp dễ dàng xác định tất cả các phần của câu hỏi của bạn, đặc biệt là thư viện. – Maiasaura

Trả lời

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 

từ các ví dụ ở trên theo mặc định RJSON đơn giản hóa "bộ sưu tập/mảng các phần tử vô hướng đồng nhất với R vector". Việc đơn giản hóa này có thể được kiểm soát bằng cách sử dụng simplify hoặc simplifyWithNames. Trong ví dụ của bạn, bạn có thể làm bất kỳ những điều sau đây để truy cập vào các yếu tố mà bạn muốn:

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

Gói jsonlite là một ngã ba của RJSONIO mà cố gắng sử dụng một bản đồ thông minh hơn giữa cấu trúc R và JSON. Tôi nghĩ điều này có thể làm cho cuộc sống của bạn dễ dàng hơn:

> 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 
Các vấn đề liên quan