首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Caused by: com.fasterxml.jackson.core.JsonParseException: Unexpected characterwas expecting double-q

Caused by: com.fasterxml.jackson.core.JsonParseException: Unexpected characterwas expecting double-q

作者头像
JavaEdge
发布2021-02-23 14:42:22
发布2021-02-23 14:42:22
3.7K0
举报
文章被收录于专栏:JavaEdgeJavaEdge

解决fasterxml中string字符串转对象json格式错误问题。

springboot中jackson使用的包是fasterxml的。可以通过如下代码,将一个形如json格式string转为一个java对象:

代码语言:javascript
复制
com.fasterxml.jackson.databind.ObjectMapper mapper = new com.fasterxml.jackson.databind.ObjectMapper();
mapper.readValue(字符串, javabean.class);

但是,当我们要转的字符串是这种格式的就会报错,因为这种格式并不是规范的json格式:

代码语言:javascript
复制
{success:2,message:'认证已通过!设备未添加,请与和航联系。设备编号:1101'}

错误信息是:

代码语言:javascript
复制
com.fasterxml.jackson.core.JsonParseException: Unexpected character ('s' (code 115)): was expecting double-quote to start field name

意思就是:fasterxml期望字段名带有双引号,也就是期望是这样的:

代码语言:javascript
复制
{"success":2,"message":"认证已通过!设备未添加,请与和航联系。设备编号:1101"}

通过对比,发现上面的字符串和规范的json字符串主要有两个不同点

  1. 字段名未用引号
  2. 第二个是使用了单引号

这都是不规范的Json格式写法。 当然,最好的解决方式是将string字符串转成规范的json格式,但是由于某些原因,不得不使用这种格式怎么办呢?

解决:

代码语言:javascript
复制
com.fasterxml.jackson.databind.ObjectMapper mapper = new com.fasterxml.jackson.databind.ObjectMapper();
//允许使用未带引号的字段名
mapper.configure(Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
//允许使用单引号
mapper.configure(Feature.ALLOW_SINGLE_QUOTES, true);

mapper.readValue(字符串, javabean.class);

除了ALLOW_UNQUOTED_FIELD_NAMES,ALLOW_SINGLE_QUOTES还有其它的设置,有用到试试。

参考

  • https://www.cnblogs.com/hyyq/p/7002614.html
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/10/27 ,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档