Java解析JSON异常需先定位类型再处理:JsonParseException是语法错误,JsonMappingException是结构不匹配,JsonProcessingException是泛型或构造问题,JSONException多因控制字符;应优先验证数据格式、检查标点与空白、调整Jackson配置或优化类映射。
Java解析JSON报异常,核心是定位错误类型再针对性处理。不是所有异常都要改代码,有些只需校验数据或微调配置。
不同异常对应不同根因,别一上来就重写解析逻辑:
"user_name",Java类里却叫userName;或字段为null但属性声明为int
\n、制表符\t或未转义的控制字符别靠肉眼找错,用工具+基础检查:
System.out.println(jsonString.replace("\n", "\\n").replace("\r", "\\r")),看清真实换行和空白jsonString = jsonString.replaceAll("[\\p{Cntrl}&&[^\r\n\t]]", "")
适用于调试或兼容老旧数据源,不建议长期用于生产环境:
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)
int):mapper.configure(DeserializationFeature.ACCEPT_NULL_AS_EMPTY_ARRAY, true) 或改用包装类(Integer)让代码主动适配数据,而不是反过来硬扛:
@JsonProperty("api_user_name")注解String、Integer),或设默认值:private int status = 0;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnore;忽略未知字段更稳妥?类上加@JsonIgnoreProperties(ignoreUnknown = true)
基本上就这些。多数情况是JSON格式不严或映射松散导致,先验证数据、再看异常类型、最后选配置或改模型——顺序错了容易绕弯子。