我在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(小心,因为我很大)
很抱歉,如果之前已经提出这个问题。我花了很长时间寻找答案,但我没有找到任何答案。
提前致谢。
答案 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"