Java解析JSON时报异常怎么办_Java JSON解析异常解决方案

Java解析JSON异常需先定位类型再处理:JsonParseException是语法错误,JsonMappingException是结构不匹配,JsonProcessingException是泛型或构造问题,JSONException多因控制字符;应优先验证数据格式、检查标点与空白、调整Jackson配置或优化类映射。

Java解析JSON报异常,核心是定位错误类型再针对性处理。不是所有异常都要改代码,有些只需校验数据或微调配置。

先看报的是哪种异常

不同异常对应不同根因,别一上来就重写解析逻辑:

  • JsonParseException:纯语法问题,比如字段没加双引号、多了一个逗号、用了中文冒号或引号
  • JsonMappingException:结构对不上,比如JSON里是"user_name",Java类里却叫userName;或字段为null但属性声明为int
  • JsonProcessingException(父类):涵盖前两者,也可能是序列化/反序列化过程中的泛型、构造函数缺失等问题
  • JSONException(json-lib等老库):常见于含换行符\n、制表符\t或未转义的控制字符

快速验证和修复JSON格式

别靠肉眼找错,用工具+基础检查:

  • 把原始JSON粘贴到json.cn或JSONLint验证是否合法
  • 检查是否有中文标点(如“:”“,”“””)、全角空格、不可见控制字符(可用IDE的“显示所有字符”功能)
  • 如果JSON来自前端或日志,打印时加System.out.println(jsonString.replace("\n", "\\n").replace("\r", "\\r")),看清真实换行和空白
  • 对含用户输入的字段(如备注、描述),预处理再解析:jsonString = jsonString.replaceAll("[\\p{Cntrl}&&[^\r\n\t]]", "")

调整Jackson配置降低敏感度

适用于调试或兼容老旧数据源,不建议长期用于生产环境:

  • 允许无引号字段名:mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true)
  • 允许末尾逗号:mapper.configure(JsonParser.Feature.ALLOW_TRAILING_COMMA, true)
  • 忽略未知字段(防Unrecognized field):mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
  • 容忍null值赋给基本类型(如int):mapper.configure(Deseria

    lizationFeature.ACCEPT_NULL_AS_EMPTY_ARRAY, true)
    或改用包装类(Integer

规范Java类定义和映射

让代码主动适配数据,而不是反过来硬扛:

  • 字段名不一致?加@JsonProperty("api_user_name")注解
  • 某些字段可能为空?属性用包装类型(StringInteger),或设默认值:private int status = 0;
  • 不想序列化null字段?类上加@JsonInclude(JsonInclude.Include.NON_NULL)
  • 需要忽略整个字段?加@JsonIgnore;忽略未知字段更稳妥?类上加@JsonIgnoreProperties(ignoreUnknown = true)

基本上就这些。多数情况是JSON格式不严或映射松散导致,先验证数据、再看异常类型、最后选配置或改模型——顺序错了容易绕弯子。