首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法解析本地存储的具有特殊字符的JSON文件,如R中反斜杠"\“

无法解析本地存储的具有特殊字符的JSON文件,如R中反斜杠"\“
EN

Stack Overflow用户
提问于 2016-06-28 11:25:09
回答 3查看 640关注 0票数 1

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

代码语言:javascript
复制
[{"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,因为您可以看到这个\无处不在,我无法解析它。当我这么做时-

代码语言:javascript
复制
st<-fromJSON("/Users/frantr/this_is_R/open_files/json_file.json")
print(st)

我明白了-

代码语言:javascript
复制
 $ : chr "[{\"status_code\":200"
 $ : chr "\"operation_id\":\"13-10\""
 $ : chr "\"response\":\"{\\\"emails\\\":    [{\\\"campaign_id\\\":\\\"1111111\\\""
 $ : chr "\\\"email_address\\\":\\\"111111111\\\""
 $ : chr "\\\"activity\\\":[]}"

有人能帮忙吗?谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-29 04:20:23

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

然后,正如你所怀疑的,\引起了一个问题。因此,我使用readLines并在一步内移除\。然后可以使用jsonlite::fromJSON读取此JSON

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

代码语言:javascript
复制
[{"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\":[]}]}}]

然后我就可以用

代码语言:javascript
复制
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()

然后,您可以从这个列表中获取您想要的任何组件/数据。

代码语言:javascript
复制
lst$response$emails

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

Stack Overflow用户

发布于 2016-06-28 11:53:56

我想这能帮上忙。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2016-06-28 12:59:59

首先,您的json是无效的,我已经验证了您的json:

代码语言:javascript
复制
[{"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软件包装载它,它工作得很好:

代码语言:javascript
复制
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":[]}]}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38074926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档