Извлечение данных из JSON с Lapply

У меня есть длинный файл JSON, из которого я хочу извлечь название города и соответствующую ему высоту. Результатом должен быть список, в котором столбец A содержит название города, столбец B - высоту.

Вот некоторые данные для R:

l <- fromJSON('[{"_id": "CtNjHGG8asEvFyqsM","cronjobname": "Elev","cronjobid": "mmsibiZL4p42fL8jh",
"cronjobtyp": "importTestData","datasource": "importTestData","data": [{
 "Station": "New York","Elev":    300},{ "Station": "London","Elev":    35}],
"createdAt": "2016-04-30T22:10:11.342Z","createdBy": null,"modifiedAt": "2016-04-30T22:10:11.342Z","modifiedBy": null}]')

И вот что я придумал:

m <- lapply(
  l[[1]]$data, 
  function(x) c(x$Station['Station'], x$Elev['Elev'])
)
m <- do.call(rbind, m)

Тем не менее, я знаю, что это не является полным и должно быть l[[1]]$data[[1]]$Station чтобы получить доступ к станции, но я не могу просто использовать [[x]]$Station к несчастью. Что мне не хватает или мне нужно поместить это в цикл для доступа к нескольким x?

1 ответ

Решение

Это то, что вы хотите?

  m<-lapply(
        l[[1]]$data, 
        function(x) c(x$Station, x$Elev)
  )
  m <- do.call(rbind, m)
  > m
  [,1]       [,2] 
  [1,] "New York" "300"
  [2,] "London"   "35" 

Или вы можете использовать это:

  m <- do.call(rbind, l[[1]]$data)
  > m
  Station    Elev
  [1,] "New York" 300 
  [2,] "London"   35  

Заявление x$Station['Station'] эквивалентно l[[1]]$data[[1]]$Station['Station'] так что в этом ничего нет.

Другие вопросы по тегам