在数据框中仅获取json中的特定对象

时间:2013-12-25 13:21:24

标签: json r

我想将一个json文件中的单个对象导入R数据框。通常我使用jsonlite包中的fromJSON()。但是现在我想将this json加载到数据框中,然后只加载名为的对象

如果我使用:

library(jsonlite)
df <- fromJSON("http://live.nhl.com/GameData/20132014/2013020555/PlayByPlay.json")

它提供包含所有对象的数据框。有没有办法只加载数据框中的播放对象?或者我应该只加载完整的json并在R中重构它?

1 个答案:

答案 0 :(得分:2)

这确实会返回一个数据帧,尽管它有点像列表和数据帧的错误。如果您使用其他包,它只是一个列表。使用str(df)(警告......长输出)

library(RJSONIO)    
str(df)
#------------
List of 1
 $ data:List of 2
  ..$ refreshInterval: num 0
  ..$ game           :List of 7
  .. ..$ awayteamid  : num 24
  .. ..$ awayteamname: chr "Anaheim Ducks"
  .. ..$ hometeamname: chr "Washington Capitals"
  .. ..$ plays       :List of 1
  .. .. ..$ play:List of 102
  .. .. .. ..$ :List of 28
  -----------Output truncated----------------

....显示plays部分可以通过以下方式获得:

plays_out <- df$data$game$plays

我没有看到尝试自己解析这个问题有什么好处。大多数“数量”的数据都在播放组件中。

当我使用jsonlite :: fromJSON时,我得到一个略有不同的结构,这与我现在需要使用不同的调用来获取plays项目完全不同:

> str(df )
'data.frame':   1 obs. of  2 variables:
 $ refreshInterval:List of 1
  ..$ data: num 0
 $ game           :'data.frame':    1 obs. of  7 variables:
  ..$ awayteamid  :List of 1
  .. ..$ data: num 24
  ..$ awayteamname:List of 1
  .. ..$ data: chr "Anaheim Ducks"
  ..$ hometeamname:List of 1
  .. ..$ data: chr "Washington Capitals"
  ..$ plays       :'data.frame':    1 obs. of  1 variable:
  .. ..$ play:List of 1
  .. .. ..$ data:'data.frame':  102 obs. of  29 variables:
  .. .. .. ..$ aoi          :List of 102
  .. .. .. .. ..$ : num  8470612 8470621 8473933 8473972 8475151 ...
  .. .. .. .. ..$ : num  8459442 8467332 8467400 8471476 8471699 ...
  .. .. .. .. ..$ : num  8459442 8467332 8467400 8471476 8471699 ...
  .. .. .. .. ..$ : num  8459442 8467332 8467400 8471476 8471699 ...
#------snipped output------------
> length(df$game$plays)
[1] 1
> length(df$game$plays$play)
[1] 1
> length(df$game$plays$play$data)
[1] 29

我认为我更喜欢RJSONIO :: fromJSON的结果,因为它不会增加数据帧强制的复杂性。