从R中的字符串中查找和提取JSON数据

时间:2019-02-03 07:32:05

标签: r json

我正在寻找一种方法(最好是一个现有的函数),可以在一个字符串中找到合法的JSON数据

我已经知道的

here所示,jsonlite::fromJSON()可以解析JSON,如下所示:

library(jsonlite)

json_glob_1 <- "{ \"age\": 22}"
json_glob_2 <- "{ \"name\":\"John\" }"

fromJSON(json_glob_1)
# $age
# [1] 22

fromJSON(json_glob_2)
# $name
# [1] "John"

我不知道的东西

是否有一个函数可以接受不纯的字符串并从该字符串中返回JSON glob;例如

messy_string_with_json <- paste0("lsdfjksdlfjk dkfjsldfkjs fkjsdf", 
                                               json_glob_1, 
                                               "slkdfjlskdfj sfkdjflskdjf sdfk", 
                                               json_glob_2, 
                                               "32345jlskdfj")

find_JSON(messy_string_with_json)
[[1]]
[1] "{ \"age\": 22}" 
[2] "{ \"name\":\"John\" }"

1 个答案:

答案 0 :(得分:0)

我不确定是否有一个现成的,但是您可以写一个。

这里我在find all values between braces上使用正则表达式

然后在结果上调用jsonlite::validate,以查看其是否有效。

library(jsonlite)

json_glob_1 <- "{ \"age\": 22}"
json_glob_2 <- "{ \"name\":\"John\" }"

x <- paste0(
    "lsdfjksdlfjk dkfjsldfkjs fkjsdf"
    , json_glob_1
    , "slkdfjlskdfj sfkdjflskdjf sdfk"
    , json_glob_2
    , "32345jlskdfj"
    )


## try and find values between braces
possible <- regmatches(x, gregexpr("(?=\\{).*?(?<=\\})", x, perl=T))[[1]]

## then try and valide them as JSON
sapply( possible, jsonlite::validate )

#     { "age": 22} { "name":"John" } 
#             TRUE              TRUE