如何从 R 中的 JSON 响应打印命名列表列表?
How can I print a list of named lists from a JSON response in R?
我正在用 R 编写一个脚本,该脚本使用一个网络 API,其中 returns 数据在一大堆复杂的 JSON 对象中,类似于:
[
{
"runIds": [9505160, 89098],
"fileCount": 2,
"runTime": 1.469,
"requestCount": 1
},
{
"runIds": [12, 13, 14],
"fileCount": 1,
"runTime": 2.9,
"requestCount": 10
}
]
我正在使用 httr R 包执行 GET 请求,该请求获取此数据并将其 returns 作为列表列表。如果您不熟悉响应格式,请检查此虚拟 R 示例的输出:
library(httr)
response = GET("https://jsonplaceholder.typicode.com/users")
content(response)
打印如下内容:
[[10]]$company
[[10]]$company$name
[1] "Hoeger LLC"
[[10]]$company$catchPhrase
[1] "Centralized empowering task-force"
[[10]]$company$bs
[1] "target end-to-end models"
(...)
打印的回复难以阅读。有什么方法可以在 R 中以 "prettified" 方式打印这个列表列表(列表等)?
使用 jsonlite
包,您可以将其转换为数据框。
library(httr)
response = GET("https://jsonplaceholder.typicode.com/users")
my_json_text <-content(response,as="text")
library(jsonlite)
my_df_output <- fromJSON(my_json_text)
head(my_df_output,2)
这给出了,
id name username email address.street address.suite address.city address.zipcode address.geo.lat address.geo.lng phone website company.name
1 1 Leanne Graham Bret Sincere@april.biz Kulas Light Apt. 556 Gwenborough 92998-3874 -37.3159 81.1496 1-770-736-8031 x56442 hildegard.org Romaguera-Crona
2 2 Ervin Howell Antonette Shanna@melissa.tv Victor Plains Suite 879 Wisokyburgh 90566-7771 -43.9509 -34.4618 010-692-6593 x09125 anastasia.net Deckow-Crist
company.catchPhrase company.bs
1 Multi-layered client-server neural-net harness real-time e-markets
2 Proactive didactic contingency synergize scalable supply-chains
编辑:
如果文件包含列表中的列表,我们实际上也可以做同样的事情,
data <- '[
{
"runIds": [9505160, 89098],
"fileCount": 2,
"runTime": 1.469,
"requestCount": 1
},
{
"runIds": [12, 13, 14],
"fileCount": 1,
"runTime": 2.9,
"requestCount": 10
}
]'
data2 <- fromJSON(data)
如果我们调用data2
,
data2
runIds fileCount runTime requestCount
1 9505160, 89098 2 1.469 1
2 12, 13, 14 1 2.900 10
sapply(data2,class)
runIds fileCount runTime requestCount
"list" "integer" "numeric" "integer"
它是列表格式。因此,我们可以将其作为列表格式存储在我们的数据框中,与 content()
输出相比,它更 美化 ,或者我们更愿意通过 [=19] 将其转换为纯数据框=]
library(tidyverse)
data2 %>% unnest(runIds)
这给出了,
fileCount runTime requestCount runIds
1 2 1.469 1 9505160
2 2 1.469 1 89098
3 1 2.900 10 12
4 1 2.900 10 13
5 1 2.900 10 14
我正在用 R 编写一个脚本,该脚本使用一个网络 API,其中 returns 数据在一大堆复杂的 JSON 对象中,类似于:
[
{
"runIds": [9505160, 89098],
"fileCount": 2,
"runTime": 1.469,
"requestCount": 1
},
{
"runIds": [12, 13, 14],
"fileCount": 1,
"runTime": 2.9,
"requestCount": 10
}
]
我正在使用 httr R 包执行 GET 请求,该请求获取此数据并将其 returns 作为列表列表。如果您不熟悉响应格式,请检查此虚拟 R 示例的输出:
library(httr)
response = GET("https://jsonplaceholder.typicode.com/users")
content(response)
打印如下内容:
[[10]]$company
[[10]]$company$name
[1] "Hoeger LLC"
[[10]]$company$catchPhrase
[1] "Centralized empowering task-force"
[[10]]$company$bs
[1] "target end-to-end models"
(...)
打印的回复难以阅读。有什么方法可以在 R 中以 "prettified" 方式打印这个列表列表(列表等)?
使用 jsonlite
包,您可以将其转换为数据框。
library(httr)
response = GET("https://jsonplaceholder.typicode.com/users")
my_json_text <-content(response,as="text")
library(jsonlite)
my_df_output <- fromJSON(my_json_text)
head(my_df_output,2)
这给出了,
id name username email address.street address.suite address.city address.zipcode address.geo.lat address.geo.lng phone website company.name
1 1 Leanne Graham Bret Sincere@april.biz Kulas Light Apt. 556 Gwenborough 92998-3874 -37.3159 81.1496 1-770-736-8031 x56442 hildegard.org Romaguera-Crona
2 2 Ervin Howell Antonette Shanna@melissa.tv Victor Plains Suite 879 Wisokyburgh 90566-7771 -43.9509 -34.4618 010-692-6593 x09125 anastasia.net Deckow-Crist
company.catchPhrase company.bs
1 Multi-layered client-server neural-net harness real-time e-markets
2 Proactive didactic contingency synergize scalable supply-chains
编辑:
如果文件包含列表中的列表,我们实际上也可以做同样的事情,
data <- '[
{
"runIds": [9505160, 89098],
"fileCount": 2,
"runTime": 1.469,
"requestCount": 1
},
{
"runIds": [12, 13, 14],
"fileCount": 1,
"runTime": 2.9,
"requestCount": 10
}
]'
data2 <- fromJSON(data)
如果我们调用data2
,
data2
runIds fileCount runTime requestCount
1 9505160, 89098 2 1.469 1
2 12, 13, 14 1 2.900 10
sapply(data2,class)
runIds fileCount runTime requestCount
"list" "integer" "numeric" "integer"
它是列表格式。因此,我们可以将其作为列表格式存储在我们的数据框中,与 content()
输出相比,它更 美化 ,或者我们更愿意通过 [=19] 将其转换为纯数据框=]
library(tidyverse)
data2 %>% unnest(runIds)
这给出了,
fileCount runTime requestCount runIds
1 2 1.469 1 9505160
2 2 1.469 1 89098
3 1 2.900 10 12
4 1 2.900 10 13
5 1 2.900 10 14