将JSON中未转义的反斜杠读入R中

时间:2013-11-19 09:03:20

标签: json r facebook-graph-api escaping rjson

我正在尝试从Facebook Graph API Explorer中读取一些数据到R中进行一些文本分析。但是,看起来JSON提要中有未转义的反斜杠,导致rjson为barf。以下是导致问题的输入类型的最小示例。

library(rjson)
txt <- '{"data":[{"id":2, "value":"I want to \\"post\\" a picture\\video"}]}'
fromJSON(txt)

(请注意,\\"\\video处的双反斜杠将在解析后转换为单反斜杠,这就是我实际数据中的内容。)

我也尝试过RJSONIO程序包,它也会出错,甚至有时会崩溃R.

以前有人遇到过这个问题吗?有没有办法解决这个问题,即手动追查每一个错误?可能有数兆字节的JSON被解析,并且错误消息对于有问题的输入的确切位置信息不足。

2 个答案:

答案 0 :(得分:0)

只需使用双反斜杠替换没有转义双引号,制表符或换行符的反斜杠

在正则表达式中,'\\\\'被转换为一个反斜杠(需要两个转义级别,一个用于R,一个用于正则表达式引擎)。我们需要perl正则表达式引擎才能使用前瞻。

library(stringr)
txt2 <- str_replace_all(txt, perl('\\\\(?![tn"])'), '\\\\\\\\')
fromJSON(txt2)

答案 1 :(得分:0)

问题是您正在尝试解析无效的JSON:

library(jsonlite)
txt <- '{"data":[{"id":2, "value":"I want to \\"post\\" a picture\\video"}]}'
validate(txt)

问题是picture\\video部分,因为\v不是有效的JSON转义序列,即使它是R和其他一些语言中的有效转义序列。也许你的意思是:

library(jsonlite)
txt <- '{"data":[{"id":2, "value":"I want to \\"post\\" a picture\\/video"}]}'
validate(txt)
fromJSON(txt)

问题的任何一种方法都是在生成无效JSON的JSON数据源上。如果这些数据确实来自Facebook,那么您在其API中发现了一个错误。但更有可能的是你没有正确地检索它。