首页 > 解决方案 > R - 从 json 中提取数据

问题描述

我的数据框看起来像这样

exmpl <-
  data.frame(
    id = c(1),
    json = c("{ \"name\":\"John\", \"age\":30, \"car\":null }")
  ) %>% 
  mutate(json = as.character(json))

它包含格式为字符的 json,但我真正的 json 更长,并且一些 json 包含其他不包含的项目。我需要的是过滤存在于我的向量中的项目。

eq <- c("name", "car")

并从中创建新列,所以结果应该是。

result <-
  data.frame(
    id = c(1),
    json = c("{ \"name\":\"John\", \"age\":30, \"car\":null }")
    json_filtered = c("{ \"name\":\"John\", \"car\":null }")
  ) %>% 
  mutate(json = as.character(json))

我正在寻找 dplyr 解决方案,但如果您有一些非 dplyr 的想法,请不要犹豫 :)

标签: rjsonparsing

解决方案


这是一个使用选项jsonlite

library(tidyverse)
library(jsonlite)
exmpl %>%
    mutate(json_filtered = map_chr(list(fromJSON(json)), ~toJSON(.x[names(.x) %in% eq])))
#  id                                    json              json_filtered
#1  1 { "name":"John", "age":30, "car":null } {"name":["John"],"car":{}}

将过滤后的条目存储在列中可能更容易list,在这种情况下,您会这样做

exmpl %>%
    mutate(json_filtered = map(list(fromJSON(json)), ~.x[names(.x) %in% eq]))

json_filtered然后包含一个list,其中的每个元素都是一个命名list的与匹配的条目eq


推荐阅读