【问题标题】:Extracting json values using a key使用键提取 json 值
【发布时间】:2019-06-05 15:41:49
【问题描述】:

我有一个名为 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]}")

【问题讨论】:

    标签: r json jsonlite rjsonio


    【解决方案1】:

    我们可以使用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)
    

    【讨论】:

      猜你喜欢
      • 2020-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-06
      • 2015-12-19
      • 1970-01-01
      • 1970-01-01
      • 2017-02-04
      相关资源
      最近更新 更多