Извлечение значений JSON с помощью ключа - PullRequest
0 голосов
/ 05 июня 2019

У меня есть строка JSON с именем test, в которой некоторые элементы содержат более одного ключа (например, 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 голосов
/ 05 июня 2019

Мы можем использовать 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)
...