r - 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 的想法,请不要犹豫 :)
解决方案
这是一个使用选项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
。
推荐阅读
- c# - 对类型“CancellationToken”的引用声称它是在“System.Runtime”中定义的
- python - 两个日期之间的值
- netty - Netty ExceptionInInitializerError
- .htaccess - “漂亮链接”的 RewriteRule 不起作用
- android - 我应该使用 AsyncTask 还是线程保持按钮操作?
- php - 如何覆盖 PyroCMS(Laravel,PHP)中的模型类?
- apache-kafka - Schema-Registry 中的模式如何通过 Replicator 传播
- javascript - 为什么组件道具未定义(vue路由器)
- makefile - 在 make 期间编译 nano 命中问题
- node.js - React - 仅在 HTTPS 上发送 POST 请求时出现网络错误