我无法解析本地存储的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\\\":[]}"有人能帮忙吗?谢谢。
发布于 2016-06-29 04:20:23
您能检查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发布于 2016-06-28 11:53:56
我想这能帮上忙。
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发布于 2016-06-28 12:59:59
首先,您的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":[]}]}https://stackoverflow.com/questions/38074926
复制相似问题