自动识别字符串中包含的有效JSON对象的功能?

问题描述 投票:0回答:1

假设我们在一个字符串中有一个或多个有效的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的函数? (无需人工干预)

具有所需输出的示例

接收字符串并返回有效JSON对象的函数find_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
r regex tidyverse stringr jsonlite
1个回答
2
投票

这可能不是一个完整的方法,但是我们如何创建一个模式来查找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
© www.soinside.com 2019 - 2024. All rights reserved.