使用 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"
我在 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"