我无法解析本地存储的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\\\":[]}"
任何人都可以帮忙。谢谢。
答案 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
例如,我的桌面上有一个名为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