You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 05:15:45