如何用Jackson解析第三方API返回的格式不规范JSON?
解决Jackson解析JSON时的JsonParseException问题
这个问题我碰到过好几次,其实是你的JSON语法和Jackson默认解析规则不匹配导致的,咱们一步步解决:
问题根源分析
你拿到的JSON字符串有两个不符合标准JSON语法的地方:
- 字段名用了单引号(标准JSON要求双引号)
- 最后一个键值对末尾多了个多余的逗号(
'address': "IN", }里的逗号)
你已经配置了ALLOW_SINGLE_QUOTES来支持单引号,但忽略了Jackson默认不允许末尾逗号的规则,这才是触发当前错误的核心原因——Jackson会把逗号后面的}当成要解析的字段名,自然会抛出"期望双引号开头"的异常。
修复方案:补充Jackson配置
只需要在你的现有配置基础上,添加允许末尾逗号的特性即可,修改后的代码如下:
ObjectMapper objectMapper = new ObjectMapper(); // 允许字段名使用单引号 objectMapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true); // 允许忽略最后一个键值对末尾的多余逗号 objectMapper.configure(JsonParser.Feature.ALLOW_TRAILING_COMMA, true); // 这个配置是生成JSON时是否给字段名加引号,解析时不影响,可根据你的需求保留或移除 objectMapper.configure(JsonGenerator.Feature.QUOTE_FIELD_NAMES, false); // 执行解析操作(替换成你的实体类) User user = objectMapper.readValue(yourJsonString, User.class);
额外说明
如果可以联系第三方API的提供者,建议让他们修复JSON的语法问题(去掉末尾逗号、统一用双引号),这是最规范的做法;如果无法修改第三方返回的内容,上面的配置就能完美兼容这种不规范的JSON格式。
内容的提问来源于stack exchange,提问作者user_27
相关产品推荐
相关产品推荐

