R中JSON解析遇特殊字符报错:如何强制执行或批量移除特殊字符?
R中处理含特殊字符的类JSON字符串解析问题
问题1:能否强制现有JSON解析代码忽略特殊字符继续执行?
JSON格式对字符编码有严格规范,jsonlite没有直接跳过非法特殊字符的参数,但可以通过两种方式避免解析流程中断:
用
tryCatch捕获错误并继续:将解析函数包裹在错误捕获逻辑中,遇到解析失败的条目时返回占位值(如NA),不影响整体流程:library(dplyr) library(purrr) library(jsonlite) my_file <- my_file %>% mutate(parsed_address = map(Address_Parse, ~tryCatch(fromJSON(.x), error = function(e) NA)))先修复编码不匹配问题:像
O\x92Brien这类字符,本质是Windows-1252编码的单引号未转成UTF-8导致的乱码,先转码再解析即可:my_file <- my_file %>% mutate(Address_Parse_fixed = iconv(Address_Parse, from = "Windows-1252", to = "UTF-8")) %>% mutate(parsed_address = map(Address_Parse_fixed, fromJSON))
问题2:通用方法批量移除/替换特殊字符
无需逐个手动处理,可借助stringi包的音译功能,批量将非ASCII特殊字符转换为最接近的ASCII字符:
library(stringi) library(dplyr) # 批量转译特殊字符(如Â→A、O’→O'Brien) my_file <- my_file %>% mutate(Address_Parse_clean = stri_trans_general(Address_Parse, "Latin-ASCII"))
如果是编码不匹配引发的特殊字符(如\x92),建议先转码再执行音译:
my_file <- my_file %>% mutate(Address_Parse_fixed = iconv(Address_Parse, from = "Windows-1252", to = "UTF-8")) %>% mutate(Address_Parse_clean = stri_trans_general(Address_Parse_fixed, "Latin-ASCII"))
处理后的Address_Parse_clean列即可正常用jsonlite解析。
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

