Извлечение данных из 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']
так что в этом ничего нет.