如何读取嵌套的 json 文件并从 r 中的数据框中的数据框中提取信息?
How to read nested json file and pull information from dataframe inside dataframe in r?
我正在读取 json
文件作为 api
的响应,该文件是 嵌套的 ,当我在 中查看它们时dataframe/table结构格式则数据框.
下有数据框
我已将文件保存在 github 位置。
library(tidyverse)
library(rjson)
library(jsonlite)
library(RCurl)
library(httr)
library(broom)
# file is available at this github link:
file_url1 <- "https://raw.githubusercontent.com/johnsnow09/covid19-df_stack-code/main/json_response.json"
json_response <- fromjson(url(file_url1))
我对 sessions
变量 中的数据感兴趣,并尝试使用 map
、tidy
,但没有用。
json_response %>%
#converting dataframe cols to list
map_if(., is.data.frame, list) %>%
# to tibble
map_if(is_list, tibble) %>%
mutate(sessions = map(sessions, broom::tidy),
vaccine_fees = map(vaccine_fees, tidy)) %>%
unnest()
以上代码无效!!
也从另一个 SO post 读取并尝试:
library(rjson)
url(file_url1) %>%
# jsonlite::fromJSON()
rjson::fromJSON()
map_dfr(json_response[[1]]$centers[[1]]$sessions[[1]], as.tibble)
但是没能得到正确的信息。
这样做的目的是从 json 文件中获取有关以下字段的信息:
district_name
、name
、min_age_limit
、available_capacity
、available_capacity_dose1
、vaccine
,然后可以根据所需的值对其应用过滤器。
您可以 unnest
sessions
变量和其中的 slots
变量以获得长数据帧。
library(magrittr)
library(tidyr)
jsonlite::fromJSON(file_url1) %>%
.[[1]] %>%
unnest(sessions) %>%
unnest(slots)
# A tibble: 280 x 20
# center_id name address state_name district_name block_name pincode lat long from
# <int> <chr> <chr> <chr> <chr> <chr> <int> <int> <int> <chr>
# 1 1273 CGHS W… CGHS Pat… Delhi West Delhi Not Appli… 110008 28 77 09:0…
# 2 1273 CGHS W… CGHS Pat… Delhi West Delhi Not Appli… 110008 28 77 09:0…
# 3 1273 CGHS W… CGHS Pat… Delhi West Delhi Not Appli… 110008 28 77 09:0…
# 4 1273 CGHS W… CGHS Pat… Delhi West Delhi Not Appli… 110008 28 77 09:0…
# 5 594035 Tihar … Tihar Ja… Delhi West Delhi Not Appli… 110064 28 77 09:0…
# 6 594035 Tihar … Tihar Ja… Delhi West Delhi Not Appli… 110064 28 77 09:0…
# 7 594035 Tihar … Tihar Ja… Delhi West Delhi Not Appli… 110064 28 77 09:0…
# 8 594035 Tihar … Tihar Ja… Delhi West Delhi Not Appli… 110064 28 77 09:0…
# 9 594035 Tihar … Tihar Ja… Delhi West Delhi Not Appli… 110064 28 77 09:0…
#10 594035 Tihar … Tihar Ja… Delhi West Delhi Not Appli… 110064 28 77 09:0…
# … with 270 more rows, and 10 more variables: to <chr>, fee_type <chr>, session_id <chr>,
# date <chr>, available_capacity <int>, min_age_limit <int>, vaccine <chr>, slots <chr>,
# available_capacity_dose1 <int>, available_capacity_dose2 <int>
我正在读取 json
文件作为 api
的响应,该文件是 嵌套的 ,当我在 中查看它们时dataframe/table结构格式则数据框.
我已将文件保存在 github 位置。
library(tidyverse)
library(rjson)
library(jsonlite)
library(RCurl)
library(httr)
library(broom)
# file is available at this github link:
file_url1 <- "https://raw.githubusercontent.com/johnsnow09/covid19-df_stack-code/main/json_response.json"
json_response <- fromjson(url(file_url1))
我对 sessions
变量 中的数据感兴趣,并尝试使用 map
、tidy
,但没有用。
json_response %>%
#converting dataframe cols to list
map_if(., is.data.frame, list) %>%
# to tibble
map_if(is_list, tibble) %>%
mutate(sessions = map(sessions, broom::tidy),
vaccine_fees = map(vaccine_fees, tidy)) %>%
unnest()
以上代码无效!!
也从另一个 SO post
library(rjson)
url(file_url1) %>%
# jsonlite::fromJSON()
rjson::fromJSON()
map_dfr(json_response[[1]]$centers[[1]]$sessions[[1]], as.tibble)
但是没能得到正确的信息。
这样做的目的是从 json 文件中获取有关以下字段的信息:
district_name
、name
、min_age_limit
、available_capacity
、available_capacity_dose1
、vaccine
,然后可以根据所需的值对其应用过滤器。
您可以 unnest
sessions
变量和其中的 slots
变量以获得长数据帧。
library(magrittr)
library(tidyr)
jsonlite::fromJSON(file_url1) %>%
.[[1]] %>%
unnest(sessions) %>%
unnest(slots)
# A tibble: 280 x 20
# center_id name address state_name district_name block_name pincode lat long from
# <int> <chr> <chr> <chr> <chr> <chr> <int> <int> <int> <chr>
# 1 1273 CGHS W… CGHS Pat… Delhi West Delhi Not Appli… 110008 28 77 09:0…
# 2 1273 CGHS W… CGHS Pat… Delhi West Delhi Not Appli… 110008 28 77 09:0…
# 3 1273 CGHS W… CGHS Pat… Delhi West Delhi Not Appli… 110008 28 77 09:0…
# 4 1273 CGHS W… CGHS Pat… Delhi West Delhi Not Appli… 110008 28 77 09:0…
# 5 594035 Tihar … Tihar Ja… Delhi West Delhi Not Appli… 110064 28 77 09:0…
# 6 594035 Tihar … Tihar Ja… Delhi West Delhi Not Appli… 110064 28 77 09:0…
# 7 594035 Tihar … Tihar Ja… Delhi West Delhi Not Appli… 110064 28 77 09:0…
# 8 594035 Tihar … Tihar Ja… Delhi West Delhi Not Appli… 110064 28 77 09:0…
# 9 594035 Tihar … Tihar Ja… Delhi West Delhi Not Appli… 110064 28 77 09:0…
#10 594035 Tihar … Tihar Ja… Delhi West Delhi Not Appli… 110064 28 77 09:0…
# … with 270 more rows, and 10 more variables: to <chr>, fee_type <chr>, session_id <chr>,
# date <chr>, available_capacity <int>, min_age_limit <int>, vaccine <chr>, slots <chr>,
# available_capacity_dose1 <int>, available_capacity_dose2 <int>