Java中Jackson无法将JSON数组转为List,如何调整JSON结构?
问题分析与解决方案
核心问题
当前代码试图直接将JSON解析为List<Condition>,但存在两个关键不匹配:
- JSON根结构是包含
condition数组的对象,而非直接的数组,导致解析类型不匹配; - JSON中存在字段拼写错误:第一个子条件的字段写为
subConditons(少了字母i),与Condition类中的subConditions字段名不一致,无法完成映射。
修改JSON的可行方案
方案一:直接改为数组格式(匹配现有代码)
如果不需要外层的condition键,将JSON调整为直接的数组结构,这样现有代码无需修改即可正确解析所有嵌套条件:
[ { "type": "NONE", "subConditions": [ { "type": "NONE", "subConditions": [] }, { "type": "AND", "subConditions": [ { "type": "NONE", "subConditions": [] } ] } ] }, { "type": "OR", "subConditions": [] } ]
方案二:修正拼写并保留外层结构(需配合代码微调)
若必须保留外层对象结构,先修正JSON中的字段拼写错误(将subConditons改为subConditions),修正后的JSON如下:
{ "condition": [ { "type": "NONE", "subConditions": [ { "type": "NONE", "subConditions": [] }, { "type": "AND", "subConditions": [ { "type": "NONE", "subConditions": [] } ] } ] }, { "type": "OR", "subConditions": [] } ] }
(注:此方案下代码需调整,比如创建一个包含List<Condition> condition字段的ConditionWrapper类,或使用TypeReference解析为Map<String, List<Condition>>,再提取数组)
关键验证点
- 确保所有子条件字段名拼写为
subConditions,与Condition类中的字段完全一致; - JSON根结构需与代码解析的目标类型匹配:解析
List<Condition>则根必须是数组。
内容的提问来源于stack exchange,提问作者Mallik Kumar
相关产品推荐
相关产品推荐

