使用行内引号将JSON导入R

使用行内引号将JSON导入R,json,r,jsonlite,Json,R,Jsonlite,我正在尝试将以下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 te

我正在尝试将以下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中可以用单引号或双引号来定义。
e、 g

json解析器读取字符串的实际“面”,因此,在您的示例中,json读取:

[{"id":"484","comment":"They call me "Bruce""}]
not(R文字表示法):

也就是说,当字符串中有引号时,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”}

从这个小例子中可以看出,为了避免歧义,转义是非常必要的


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

[{“id”:“484”,“comment”:“他们叫我”Bruce”“}]
无效json Ref:+请在中尝试json字符串。它不会使用
jsonlite
RJSONIO
rjson
进行解析。非常感谢-非常有用。我现在看到我从无效的JSON开始。然而,我正在处理大量的数据,这些数据散布在这个结构中。我只是想构造一小段代码来搜索正则表达式并正确地转义数据集吗?@user3741038:是的,我想你应该这样做,即使我不认为这很容易……对于大型json,有没有办法使反斜杠不是手动的?
"[{\"id\":\"484\",\"comment\":\"They call me \"Bruce\"\"}]" 
[{"id":"484","comment":"They call me \"Bruce\""}]
"[{\"id\":\"484\",\"comment\":\"They call me \\\"Bruce\\\"\"}]"
> fromJSON("[{\"id\":\"484\",\"comment\":\"They call me \\\"Bruce\\\"\"}]")
   id              comment
1 484 They call me "Bruce"