前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >解决 Cannot deserialize instance of java.lang.String out of START_OBJECT token 错误记

解决 Cannot deserialize instance of java.lang.String out of START_OBJECT token 错误记

原创
作者头像
高久峰
发布2024-02-23 17:55:30
7590
发布2024-02-23 17:55:30
举报

最近在代码迁移过程中,遇到了 JSON 解析失败的问题。具体表现为出现 "Cannot deserialize instance of java.lang.String out of START_OBJECT token" 错误。经过仔细研究和调试,发现问题的根源在于之前使用的 fastjson 转换库被替换为 jackson 后无法正确读取数据。

针对这个问题,我们需要做一些调整和更改。首先,让我们来看一下相关的代码内容:

代码语言:javascript
复制
/**
 * 微盟基础响应类
 */
public class WeimobShopBaseResponse implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 响应码
     */
    private WeimobShopCode code;

    /**
     * 响应结果
     */
    private String data;

    // 省略 getter 和 setter 方法
}

在原有代码中,我们将响应数据统一定义为 String 类型,以便后续根据具体业务再次解析。然而,由于 jackson 库不能正确处理这种情况,我们需要采取另外一种方法来解决这个问题。

我们可以利用 jackson 的 readTree 方法将 JSON 字符串转换为 JsonNode 对象,再从中提取出 codedata 进行单独解析。下面是相应的代码示例:

代码语言:javascript
复制
// 创建 ObjectMapper 实例
ObjectMapper objectMapper = new ObjectMapper();

// 使用 readTree 方法将 JSON 字符串转换为 JsonNode 对象
JsonNode jsonNode = objectMapper.readTree(jsonString);

// 获取 JsonNode 中的值
String code = jsonNode.get("code").asText();
String data = jsonNode.get("data").asText();

通过以上方式,我们可以成功解析 JSON 数据并获取到 codedata 的数值,避免了 "Cannot deserialize instance of java.lang.String out of START_OBJECT token" 错误的发生。

通过这次经历,我们学到了在使用不同的 JSON 转换库时需要注意其差异,及时调整代码以适配新的转换库,保证代码的正常运行。希望这篇文章对你在类似情况下有所帮助。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档