You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot解析嵌套JSON为独立对象时遇MismatchedInputException错误

问题:Jackson解析嵌套JSON对象时出现MismatchedInputException错误

我有一段包含嵌套对象的JSON数据:

{
  "process": "create",
  "processDescription": "some description",
  "book": {
    "id": "some unique id",
    "bookName": "some name",
    "bookISBN": "some number",
    "bookDesc": "some description",    
    "author": {
      "id": "a different ID",
      "firstName": "some name",
      "lastName": "some description"
    },
    "timestampUpdated": null,
    "timestampCreated": 1672753599223,
    "createdByUser": "Jane Doe",
    "updatedByUser": null
  },
  "someField": "some data",
  "anotherField": "more data"
}

我仅关注其中的book对象和author对象,且已为它们定义了对应的Java类。尝试通过以下代码读取JSON字符串时出现错误:

JsonNode jsonObject = new ObjectMapper().readTree(jsonString);
JsonNode bookObj = jsonObject.get("book");
JsonNode authorObj = bookObj.get("author");

ObjectMapper objectMapper = new ObjectMapper();
AuthorClass author = objectMapper.readValue(authorObj.asText(), AuthorClass.class);

错误信息:

com.fasterxml.jackson.databind.exc.MismatchedInputException: No content to map due to end-of-input at [Source: (String)""; line: 1, column: 0]


问题原因

调用authorObj.asText()会尝试将author这个JSON对象转换为字符串,但Jackson对非字符串类型的JsonNode调用asText()会返回空字符串,后续readValue解析空字符串时自然会报“无内容可映射”的错误。

解决方法

以下几种方式可以正确解析嵌套的author对象:

方法1:直接从JsonNode转换为Java对象

使用treeToValue方法直接将JsonNode转换为目标类实例,无需转成字符串:

ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonObject = objectMapper.readTree(jsonString);
// 直接定位到author节点
JsonNode authorNode = jsonObject.get("book").get("author");
// 转换为AuthorClass对象
AuthorClass author = objectMapper.treeToValue(authorNode, AuthorClass.class);

方法2:先解析Book对象再取Author

如果已经定义了包含AuthorClass字段的BookClass,可以先解析整个book节点,再从中获取author:

ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonObject = objectMapper.readTree(jsonString);
// 解析book节点为BookClass实例
BookClass book = objectMapper.treeToValue(jsonObject.get("book"), BookClass.class);
// 从book对象中获取author
AuthorClass author = book.getAuthor();

方法3:使用JsonParser解析

通过JsonNode.traverse()获取JsonParser,再传入readValue方法:

ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonObject = objectMapper.readTree(jsonString);
JsonNode authorNode = jsonObject.get("book").get("author");
// 用traverse()获取解析器,再转换对象
AuthorClass author = objectMapper.readValue(authorNode.traverse(), AuthorClass.class);

内容的提问来源于stack exchange,提问作者jason

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 07:25:33