使用键提取json值

时间:2019-06-05 15:41:49

标签: r json jsonlite rjsonio

我有一个名为test的JSON字符串,其中某些元素包含多个键(例如foo和bar)。

我的目标是仅提取foo的值。用R如何做到这一点?

我曾尝试同时转换为矩阵和data.frame,但这无助于解决问题。

> test
[1] "{\"foo\":[1,2,3],\"bar\":[0]}" "{\"foo\":[1]}"                 "{\"foo\":[4], \"bar\":[1]}"   
[4] "{\"foo\":[2]}"                 "{\"foo\":[1,2]}"               "{\"foo\":[3]}" 

任何帮助将不胜感激

dput(test)
c("{\"foo\":[1,2,3],\"bar\":[0]}", "{\"foo\":[1]}", "{\"foo\":[4], \"bar\":[1]}", 
"{\"foo\":[2]}", "{\"foo\":[1,2]}", "{\"foo\":[3]}")

1 个答案:

答案 0 :(得分:0)

我们可以使用fromJSON转换为data.frame,然后提取foo列,即list

library(jsonlite)
lapply(paste0("[", test, "]"), function(x) unlist(fromJSON(x)$foo))

或将元素paste放入单个字符串,然后执行fromJSON

fromJSON(paste0("[", paste(test, collapse=","), "]"))$foo
#[[1]]
#[1] 1 2 3

#[[2]]
#[1] 1

#[[3]]
#[1] 4

#[[4]]
#[1] 2

#[[5]]
#[1] 1 2

#[[6]]
#[1] 3

或使用tidyverse

library(tidyverse)
str_c(test, collapse=",") %>%
    str_c("[", ., "]") %>%
    fromJSON %>%
    pull(foo)