我正在用大量的JSON文件在R中工作。这些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级为2"的键1的列表,而" key 2 at Level 2"。
您可以在此链接中找到一个真实示例:http://bioinfo.hpc.cam.ac.uk/cellbase/webservices/rest/swagger.json(当心,因为我很大)
对不起,如果以前提出过这个问题。我已经花了很长时间寻找答案,但是我什么都没找到。
预先感谢。
在这种情况下,您需要每个顶级值中的密钥。我们可以通过将每个元素映射到其名称来做到这一点。
这将为我们提供一个包含NULL
s和字符向量的列表。我们 unlist
摆脱了 NULL
s并将其变成一个字符向量。
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"