无法解析本地存储的JSON文件,如反斜杠" \"在R

时间:2016-06-28 11:25:09

标签: json r mailchimp

我无法解析本地存储的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\\\":[]}"

任何人都可以帮忙。谢谢。

3 个答案:

答案 0 :(得分:1)

这可以帮助我猜。

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

答案 1 :(得分:1)

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

CreateProcessW(L"C:\\Program Files\\SublimeText2\\sublime_text", 
              //...

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

[{"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\":[]}]}"}]

答案 2 :(得分:1)

您可以查看您的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()

然后,您可以从此列表中获取所需的任何组件/数据

lst$response$emails

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