如何从 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