2016-06-28 36 views
1

解析与像反斜线特殊字符存储在本地JSON文件“\”我无法解析本地存储的JSON文件它看起来像这 -无法R中

[{"status_code":200,"operation_id":"13-10","response":"{\"emails\": 
[{\"campaign_id\":\"1111111\",\"email_address\":\"[email protected]\",\"activity\": 
[]},{\"campaign_id\":\"22222\",\"email_address\":\"[email protected]\",\"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

W这个串是从哪里来的?你的*文件*是这样的还是你在查看窗口中检查了一个值?你得到一个实际的错误? '\'是字符串中使用的转义字符,它允许你输入真正特殊的字符,比如''',它实际上不存在于字符串中。所有的编程语言都有一种方法来转义特殊字符。 C,C++,C#,Java,Markdown和其他人,这个字符是'\' –

+0

我的文件只是这样,我如何将这个json文件转换为csv格式,3列为“email_address”,“campaign_id” ,“活动”?谢谢 – frant

回答

1

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

然后,如您怀疑\是造成问题。所以我使用readLines并一步删除\。这JSON然后可以使用jsonlite::fromJSON

例如阅读,我有我的桌面上名为myJson.json,其中包含此字符串

[{"status_code":200,"operation_id":"13-10","response":{\"emails\":[{\"campaign_id\":\"1111111\",\"email_address\":\"[email protected]\",\"activity\":[]},{\"campaign_id\":"22222\",\"email_address\":\"[email protected]\",\"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 "[email protected]" "[email protected]" 
# .. .. ..$ activity  :List of 2 
# .. .. .. ..$ : list() 
# .. .. .. ..$ : list() 

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

lst$response$emails 

# [[1]] 
# campaign_id email_address activity 
# 1  1111111  [email protected]  NULL 
# 2  22222  [email protected]  NULL 
+0

感谢您的快速响应,但我正在从本地保存的json文件中读取json文件,像这样 - lst <-fromJSON(“/ Users/frantr/this_is_R/open_files/json_file.json”)但lst不是列表,它是一个数据框架,一个非常奇怪的数据框架。你能帮我解答一下吗,谢谢。 – frant

+0

是的,我正在使用jsonlite,我做到了 - st <-fromJSON(“/ Users/frantr/this_is_R/open_files/json_file.json”)。 – frant

+0

我已经更新了问题并显示了输出,谢谢。 – frant

1

这可以帮助我猜。

library(RJSONIO) 

    file <- '[{"status_code":200,"operation_id":"13-10","response":"{\"emails\":[{\"campaign_id\":\"1111111\",\"email_address\":\"[email protected]\",\"activity\":[]},{\"campaign_id\":\"22222\",\"email_address\":\"[email protected]\",\"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 
+0

感谢您的回复,我只想问你一个问题,如何将这个json文件转换为csv格式,其中3列为“email_address”,“campaign_id”,“活动“?谢谢 – frant

+0

首先将其转换为数据框,然后写入csv。'res < - data.frame(rbind.fill(dat))'和'write.csv(res,”res.csv“ ,row.names = F)' –

1

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

[{"status_code":200,"operation_id":"13-10","response":"{\"emails\":[{\"campaign_id\":\"1111111\",\"email_address\":\"[email protected]\",\"activity\":[]},{\"campaign_id\":\"22222\",\"email_address\":\"[email protected]\",\"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":"[email protected]","activity":[]},{"campaign_id":"22222","email_address":"[email protected]","activity":[]}]} 
+0

我的JSON也出现错误。 – SymbolixAU

+0

感谢您的快速回复。我只想问你一个问题,我该如何将这个json文件转换为csv格式,其中3列为“email_address”,“campaign_id”,“Activity”?谢谢。 – frant