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

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

我的方式(优选现有的功能),可以将字符串内定位合法JSON数据后

What I know already

如图所示herejsonlite::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"

What I do not know

是否有可以接受的不纯的字符串,并从该字符串中返回JSON水珠(S)的功能;例如

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\" }"
r json
1个回答
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 
© www.soinside.com 2019 - 2024. All rights reserved.