使用 R 从 JSON 中仅提取特定级别的关键元素

Extract only the key elements at a specific level from a JSON using R

我在 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"
        }
    }
}

所以,在这个例子中,我想要检索一个包含 "Key 1 at level 2" 和 "Key 2 at level 2".

的列表

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

抱歉,如果之前有人问过这个问题。我花了很长时间寻找答案,但什么也没找到。

提前致谢。

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

这将为我们提供一个包含 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"