如何在R的read_csv中保留双引号以读取JSON数据
解决read_csv读取含JSON的CSV时丢失双引号的问题
问题根源
你的CSV文件中,存储JSON的字段内的双引号未遵循CSV标准转义规则。标准CSV要求字段内的双引号必须用连续两个双引号("")表示,否则解析器会将内部双引号误判为字段结束标记,导致引号丢失。
解决方案
方案1:修复CSV文件格式(推荐)
修改CSV中JSON字段的内容,将内部双引号替换为连续两个双引号。修改后的CSV内容如下:
A,B,C 1,2,"[{""C1"":""C6.bmp"",""C2"": ""C5.bmp""}]" 3,4,"[{""C1"":""C6.bmp"",""C2"": ""C5.bmp""}]" 5,6,"[{""C1"":""C6.bmp"",""C2"": ""C5.bmp""}]" 7,8,"[{""C1"":""C6.bmp"",""C2"": ""C5.bmp""}]"
此时用read_csv读取即可保留JSON中的双引号:
json_data <- read_csv("test.csv")
方案2:调整解析参数(无需修改CSV)
如果无法修改原CSV文件,可使用readr包的read_delim函数,指定quote参数为无意义字符,让解析器不处理字段内的双引号:
library(readr) json_data <- read_delim("test.csv", delim = ",", quote = '')
读取完成后,C列会保留完整的JSON格式,可直接传入fromJSON解析。
方案3:手动恢复双引号(应急方案)
若上述方法均不可用,可在读取后通过字符串替换手动恢复双引号(仅适用于JSON结构固定的场景):
library(stringr) json_data$C <- str_replace_all(json_data$C, "(\\w+):(\\w+\\.\\w+)", "\"\\1\":\"\\2\"")
替换后即可正常使用fromJSON解析C列数据。
内容的提问来源于stack exchange,提问作者nclaidiere
相关产品推荐
相关产品推荐

