1

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

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

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

我还尝试了 RJSONIO 包,它也给出了错误,有时甚至使 R 崩溃。

有没有人遇到过这个问题?有没有办法解决这个问题,而不是手动查找出现的每个错误?可能解析了数兆字节的 JSON,并且错误消息对于有问题的输入的确切位置并没有提供太多信息。

4

2 回答 2

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 中发现了一个错误。但更有可能您没有正确检索它。

于 2014-07-25T11:08:20.847 回答
0

只需用双反斜杠替换不转义双引号、制表符或换行符的反斜杠。

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

library(stringr)
txt2 <- str_replace_all(txt, perl('\\\\(?![tn"])'), '\\\\\\\\')
fromJSON(txt2)
于 2013-11-19T09:12:57.057 回答