使用R

时间:2017-09-29 11:13:42

标签: json r jsonlite

我在R中使用巨大的JSON文件。这些JSON文件具有嵌套到列表中的列表(等等...)。因此,有多个级别的元素。

我的问题是如何只提取存储在一个特定级别的关键元素,而不用所有嵌套列表获取相关值?

我正在处理的文件看起来越来越像这样:

{
    "Key 1 at level 1": "value x",
    "Key 2 at level 1": "value x",
    "Key 3 at level 1": {
        "Key 1 at level 2": {
            "Key 1 at level 3": "value x",
            "Key 2 at level 3": "value x",
            "Key 3 at level 3": "value x"
        },
        "Key 2 at level 2": {
            "Key 4 at level 3": "value x",
            "Key 5 at level 3": "value x",
            "Key 6 at level 3": "value x"
        }
    }
}

所以,在这个例子中,我想要的是检索一个包含“2级密钥1”和“级别2密钥2”​​的列表。

你可以在这个链接中找到一个真实的例子:http://bioinfo.hpc.cam.ac.uk/cellbase/webservices/rest/swagger.json(小心,因为我很大)

很抱歉,如果之前已经提出这个问题。我花了很长时间寻找答案,但我没有找到任何答案。

提前致谢。

1 个答案:

答案 0 :(得分:0)

在这种情况下,您需要每个顶级值中的键。我们可以通过将每个元素映射到它的名称来实现。

这将为我们提供一个包含NULL和字符向量的列表。我们unlist删除NULL并将其转换为单个字符向量。

library('purrr')
library('tidyverse')
library('rjson')

swagger <- fromJSON('
  {
      "Key 1 at level 1": "value x",
      "Key 2 at level 1": "value x",
      "Key 3 at level 1": {
          "Key 1 at level 2": {
              "Key 1 at level 3": "value x",
              "Key 2 at level 3": "value x",
              "Key 3 at level 3": "value x"
          },
          "Key 2 at level 2": {
              "Key 4 at level 3": "value x",
              "Key 5 at level 3": "value x",
              "Key 6 at level 3": "value x"
          }
      }
  }
')
map(swagger, names) %>% unlist

[1] "Key 1 at level 2" "Key 2 at level 2"