我有一个类似于json的字符串,表示一个嵌套结构。它不是真正的json,因为名称和值均未加引号。我想将其解析为嵌套结构,例如列表清单。

#example:
x_string = "{a=1, b=2, c=[1,2,3], d={e=something}}"

结果应该是这样的:
x_list = list(a=1,b=2,c=c(1,2,3),d=list(e="something"))

有什么不方便的功能,我不知道这种解析吗?

谢谢。

最佳答案

如果所有数据都一致,那么有一个简单的解决方案涉及regex和jsonlite包。代码是:

if(!require(jsonlite, quiet=TRUE)){
    #if library is not installed: installs it and loads it into the R session for use.

    install.packages("jsonlite",repos="https://ftp.heanet.ie/mirrors/cran.r-project.org")
    library(jsonlite)
}

x_string = "{a=1, b=2, c=[1,2,3], d={e=something}}"

json_x_string = "{\"a\":1, \"b\":2, \"c\":[1,2,3], \"d\":{\"e\":\"something\"}}"
fromJSON(json_x_string)

s <- gsub( "([A-Za-z]+)", "\"\\1\"",  gsub( "([A-Za-z]*)=", "\\1:", x_string ) )

fromJSON( s )

第一部分检查软件包是否已安装。如果是,它将加载它,否则它将安装它,然后加载它。我通常将此内容包含在我正在编写的任何R代码中,以使在个人电脑/人之间进行转移变得更容易。

您的字符串是x_string,我们希望它看起来像json_x_string,当我们调用fromJSON()时可以提供所需的输出。

正则表达式分为两部分,因为已经有一段时间了-我很确定这可以变得更加优雅。再说一次,这取决于您的数据是否一致,因此我现在将其保留下来。首先,它将“=”更改为“:”,然后在所有字母组周围添加引号。调用fromJSON得到输出:

fromJSON

$ a

[1] 1

$ b

[1] 2

$ c

[1] 1 2 3

$ d

$ d $ e

[1]“某物”

10-08 07:57