r - 如何从 R 中的 JSON 响应中打印命名列表的列表?
问题描述
我正在用 R 编写一个脚本,它使用一个 Web API,它以大量复杂的 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 请求,该请求获取此数据并将其作为列表列表返回。如果您不熟悉响应格式,请检查此虚拟 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 中以“美化”的方式打印这个列表(列表等)?
解决方案
使用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()
,或者我们可以更喜欢将其转换为纯数据帧,
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
推荐阅读
- django - Django ORM 检查时
- c - 函数连接额外的字符
- angularjs - 如何使用angularjs从其他js文件中注入模块中的依赖项
- c# - C#控制台:设置windows键盘RepeatDelay
- twilio - 任务关闭后,Twilio 工作人员活动不会从忙碌变为空闲
- keycloak - 是否可以使用自定义用户属性进行 KeyCloak 身份验证?
- memory-leaks - 重复添加/删除导致内存泄漏
- sql - max 函数在有 case when 子句时没有
- html - 如何通过select添加请求参数?
- java - 传递对 javafx.application.Application 的引用