gpt4 book ai didi

json - 使用内联引号将 JSON 导入 R

转载 作者:行者123 更新时间:2023-12-01 09:56:14 27 4
gpt4 key购买 nike

我正在尝试将以下 JSON 文件(“my_file.json”)读入 R,其中包含以下内容:

[{"id":"484","comment":"They call me "Bruce""}]

使用 jsonlite 包(0.9.12),以下失败:
library(jsonlite)
fromJSON(readLines('~/my_file.json'))

收到错误:
"Error in parseJSON(txt) : lexical error: invalid char in json text.
84","comment":"They call me "Bruce""}]
(right here) ------^"

这是 R 转义文件的输出:
readLines('~/my_file.json')

"[{\"id\":\"484\",\"comment\":\"They call me \"Bruce\"\"}]"

删除“Bruce”周围的引号可以解决问题,如下所示:

my_file.json
[{"id":"484","comment":"They call me Bruce"}]

但是擒纵装置有什么问题呢?

最佳答案

在 R strings literals可以使用单引号或双引号定义。
例如

s1 <- 'hello'
s2 <- "world"

当然,如果您想在使用双引号定义的字符串文字中包含双引号,您需要转义(使用反斜杠)内部引号,否则 R 代码解析器将无法正确检测字符串的结尾(同样适用于单引号)。
例如
s1 <- "Hello, my name is \"John\""

如果您在控制台上打印(使用 cat ¹)此字符串,或者将此字符串写入文件,您将获得字符串的实际“面”,而不是 R 文字表示,即:
> cat("Hello, my name is \"John\"")
Hello, my name is "John"

json 解析器读取字符串的实际“面”,因此,在您的情况下 json 读取:
[{"id":"484","comment":"They call me "Bruce""}]

不是(R 字面表示):
"[{\"id\":\"484\",\"comment\":\"They call me \"Bruce\"\"}]" 

话虽如此,当您在字符串中有引号时,json 解析器也需要双引号转义。

因此,您的字符串应该以这种方式修改:
[{"id":"484","comment":"They call me \"Bruce\""}]

如果您只是通过添加反斜杠来修改您的文件,您将完全能够读取 json。

请注意,该字符串的相应 R 文字表示将是:
"[{\"id\":\"484\",\"comment\":\"They call me \\\"Bruce\\\"\"}]"

事实上,这有效:
> fromJSON("[{\"id\":\"484\",\"comment\":\"They call me \\\"Bruce\\\"\"}]")
id comment
1 484 They call me "Bruce"

¹
默认 R print函数(当您在一个值上简单地按 ENTER 键时也会调用)返回相应的 R 字符串文字。如果要打印实际字符串,则需要使用 print(quote=F,stringToPrint) , 或 cat功能。

编辑 (在@EngrStudent 上关于自动转义引号的可能性的评论):

Json 解析器不能自动转义引号。
我的意思是,试着把自己放在计算机的鞋子和图像中,你应该将这个(未转义的)字符串解析为 json: { "foo1" : " : "foo2" : "foo3" }
我看到至少三种可能的转义给出有效的 json: { "foo1" : " : \"foo2\" : \"foo3" } { "foo1\" : " : "foo2\" : \"foo3" } { "foo1\" : \" : \"foo2" : "foo3" }
从这个小例子可以看出,为了避免歧义,转义确实是必要的。

也许,如果您想要转义的字符串有一个非常特殊的结构,您可以在其中识别(没有不确定性)需要转义的双引号,您可以创建自己的自动转义程序,但您需要从头开始,因为有没有内置。

关于json - 使用内联引号将 JSON 导入 R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26245188/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com