r - 自动识别字符串中包含的有效 JSON 对象的函数?
问题描述
假设我们在一个字符串中有一个或多个有效的 JSON 对象。考虑字符串:
paste0("klsdjfo234u", toJSON(iris[1, ]), "lsdkfj20934ujsdfl")
# [1] "klsdjfo234u[{\"Sepal.Length\":5.1,\"Sepal.Width\":3.5,\"Petal.Length\":1.4,\"Petal.Width\":0.2,\"Species\":\"setosa\"}]lsdkfj20934ujsdfl"
如果我们知道 JSON 在字符串中的位置,我们可以使用str_split()
或轻松提取它substr()
但是对于很长的字符串,这可能是费力和手动的。
是否有任何函数可以自动从字符串中找到有效的 JSON?(无需人工干预)
具有所需输出的示例
find_JSON()
接收字符串并返回有效 JSON 对象的函数
paste0("klsdjfo234u", toJSON(iris[1, ]), "lsdkfj20934ujsdfl") %>%
find_JSON()
# [1] [{\"Sepal.Length\":5.1,\"Sepal.Width\":3.5,\"Petal.Length\":1.4,\"Petal.Width\":0.2,\"Species\":\"setosa\"}]
和
paste0("klsdjfo234u", toJSON(iris[1, ]), "lsdkfj20934ujsdfl") %>%
find_JSON %>%
jsonlite::fromJSON
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 5.1 3.5 1.4 0.2 setosa
解决方案
这可能不是一个完全证明的方法,但我们如何创建一个模式来查找 json 并提取它
vals <- paste0("klsdjfo234u", toJSON(iris[1, ]), "lsdkfj20934ujsdfl")
lapply(stringr::str_extract_all(vals, '\\[\\{.*\\}\\]'), jsonlite::fromJSON)
#[[1]]
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1 5.1 3.5 1.4 0.2 setosa
推荐阅读
- python - how to insert file name into "to_csv"
- azure - Azure Policy Deny:如果资源组名称中不存在标记之一
- javascript - 不要使用构造函数
- javascript - canvas js用图像填充弧线
- r - 使用 ggplot2 制作日志热图
- java - 链表实现的时间复杂度差异(迭代VS递归)?
- python - 将嵌套的 JSON 转换为 Python 字典
- java - 如何使用 Spring-Data for Mongodb 插入嵌套值
- r - 按列求和并使用 R 计算百分比
- ruby - 在 Ruby 中,应用 puts 方法的对象是哪个?