使用RJSONIO在R中解析深层嵌套的JSON结构

psy*_*dia 5 r

我怀疑我在这里遗漏了一些明显的东西,但是如何解析R中深层嵌套的结构RJSONIO

例如 - 假设我直接想要results.data.json$MRData$RaceTable$Races[[1]]$Results[[8]]$Driver使用以下代码段引用$ familyName :

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

RJSONIO似乎不想将..$Results[[i]]数据解析为结构化元素?

use*_*452 3

require(RJSONIO)\n\nsomedata1<-list(a=1,b=\'w\')\nfromJSON(toJSON(somedata1))\n# $a\n# [1] 1\n\n# $b\n# [1] "w"\n\nsomedata2<-list(a=1,b=2)\nfromJSON(toJSON(somedata2))\n# a b \n# 1 2 \n\nsomedata3<-list(a=\'v\',b=\'w\')\nfromJSON(toJSON(somedata3))\n#  a   b \n# "v" "w" \n\nfromJSON(toJSON(somedata3),simplify=StrictNumeric)\n# $a\n# [1] "v"\n\n# $b\n# [1] "w"\n\nfromJSON(toJSON(somedata2),simplify=FALSE)\n# $a\n# [1] 1\n\n# $b\n# [1] 2\n\nfromJSON(toJSON(somedata3),simplifyWithNames = FALSE)\n# $a\n# [1] "v"\n\n# $b\n# [1] "w"\n\n\nfromJSON(toJSON(somedata2),simplifyWithNames = FALSE)\n# $a\n# [1] 1\n\n# $b\n# [1] 2\n
Run Code Online (Sandbox Code Playgroud)\n\n

从上面的例子来看,默认情况下,RJSON 将“同质标量元素的集合/数组简化为 R 向量”。simplify这种简化可以使用或来控制simplifyWithNames。在您的示例中,您可以执行以下任一操作来访问所需的元素:

\n\n
require(RJSONIO)\nresultsURL=\'http://ergast.com/api/f1/2012/1/results.json\'\nresults.data.json=fromJSON(resultsURL)\nresults.data.json$MRData$RaceTable$Races[[1]]$Results[[8]]$Driver[\'familyName\']\n# familyName \n#    "P\xc3\xa9rez" \n\nresults.data.json=fromJSON(resultsURL,simplify=FALSE)\nresults.data.json$MRData$RaceTable$Races[[1]]$Results[[8]]$Driver$familyName\n# [1] "P\xc3\xa9rez"\n\nresults.data.json=fromJSON(resultsURL,simplify=StrictNumeric)\nresults.data.json$MRData$RaceTable$Races[[1]]$Results[[8]]$Driver$familyName\n# [1] "P\xc3\xa9rez"\n\nresults.data.json=fromJSON(resultsURL,simplifyWithNames = FALSE)\nresults.data.json$MRData$RaceTable$Races[[1]]$Results[[8]]$Driver$familyName\n# [1] "P\xc3\xa9rez"\n
Run Code Online (Sandbox Code Playgroud)\n