我的方式(优选现有的功能),可以将字符串内定位合法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水珠(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\" }"
我不知道如果存在了现成的,但你可以写一个。
在这里我使用正则表达式来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