无法解析本地存储的 JSON 文件,其中包含 R 中的反斜杠“\”等特殊字符

Unable to parse locally stored JSON file with special character like backslash "\" in R

我无法解析本地存储的 JSON 文件,它看起来像这样-

[{"status_code":200,"operation_id":"13-10","response":"{\"emails\":
[{\"campaign_id\":\"1111111\",\"email_address\":\"1111@111\",\"activity\":
[]},{\"campaign_id\":\"22222\",\"email_address\":\"2222@2222\",\"activity\":[]}}}]

我正在使用 jsonlite 如您所见,这个 \ 无处不在,我无法解析它。 当我这样做时 -

st<-fromJSON("/Users/frantr/this_is_R/open_files/json_file.json")
print(st)

我明白了-

 $ : chr "[{\"status_code\":200"
 $ : chr "\"operation_id\":\"13-10\""
 $ : chr "\"response\":\"{\\"emails\\":    [{\\"campaign_id\\":\\"1111111\\""
 $ : chr "\\"email_address\\":\\"111111111\\""
 $ : chr "\\"activity\\":[]}"

谁能帮帮忙,谢谢。

这可以帮助我猜测。

library(RJSONIO)

    file <- '[{"status_code":200,"operation_id":"13-10","response":"{\"emails\":[{\"campaign_id\":\"1111111\",\"email_address\":\"1111@111\",\"activity\":[]},{\"campaign_id\":\"22222\",\"email_address\":\"2222@2222\",\"activity\":[]}}}]'

    json <- fromJSON(file, nullValue = NA)

    dat <- lapply(json, function(j) {
      as.data.frame(replace(j, sapply(j, is.list), NA))
    })


    library(plyr)
    res <- rbind.fill(dat)

    > res
      status_code operation_id response
    1         200        13-10       NA

首先你的json无效 我已经验证了你的 json:

[{"status_code":200,"operation_id":"13-10","response":"{\"emails\":[{\"campaign_id\":\"1111111\",\"email_address\":\"1111@111\",\"activity\":[]},{\"campaign_id\":\"22222\",\"email_address\":\"2222@2222\",\"activity\":[]}]}"}]

并使用 jsonlite 包加载它并且工作正常:

library(jsonlite)
json = fromJSON("pathTofile.json")
json

  status_code operation_id
1         200        13-10
                                                                                                                                           response
1 {"emails":[{"campaign_id":"1111111","email_address":"1111@111","activity":[]},{"campaign_id":"22222","email_address":"2222@2222","activity":[]}]}

您能检查一下您的 JSON 字符串是如何生成的吗?它有几个问题,例如在第一个内部 { 之前(在 response: 之后)有一个额外的 ",并且缺少一个 ].

然后,正如您所怀疑的那样,\ 导致了问题。所以我使用 readLines 并一步删除 \ 。然后可以使用 jsonlite::fromJSON

读取此 JSON

例如,我的桌面上有一个名为 myJson.json 的文件,其中包含此字符串

[{"status_code":200,"operation_id":"13-10","response":{\"emails\":[{\"campaign_id\":\"1111111\",\"email_address\":\"1111@111\",\"activity\":[]},{\"campaign_id\":"22222\",\"email_address\":\"2222@2222\",\"activity\":[]}]}}]

然后我可以使用

阅读它
lst <- fromJSON(gsub("\\","",readLines("~/Desktop/myJson.json")))

str(lst)
# 'data.frame': 1 obs. of  3 variables:
#   $ status_code : int 200
# $ operation_id: chr "13-10"
# $ response    :'data.frame':  1 obs. of  1 variable:
#   ..$ emails:List of 1
# .. ..$ :'data.frame': 2 obs. of  3 variables:
#   .. .. ..$ campaign_id  : chr  "1111111" "22222"
# .. .. ..$ email_address: chr  "1111@111" "2222@2222"
# .. .. ..$ activity     :List of 2
# .. .. .. ..$ : list()
# .. .. .. ..$ : list()

然后你可以从这个列表中得到你想要的任何东西components/data

lst$response$emails

# [[1]]
# campaign_id email_address activity
# 1     1111111      1111@111     NULL
# 2       22222     2222@2222     NULL