我正在 Java Web App 中使用 API。 API 返回 JSON,并且每个问题都有“翻译”字段。当翻译可用时,它将作为嵌套对象类型返回。如果没有可用的翻译,则将其作为空数组返回。我正在使用 Jackson 反序列化器来反序列化结果。
{
"result" :{"QI": {
"Question": "Select City",
"Option": {
"1": {
"Display": "Washington DC"
},
"2": {
"Display": "New Delhi"
},
"3": {
"Display": "London"
}
},
"Transalations": []
},
"Q2": {
"Question": "Select Country",
"Option": {
"1": {
"Display": "India"
},
"2": {
"Display": "USA"
},
"3": {
"Display": "UK"
}
},
"Transalations": {
"ZH-T": {
"Question": "選擇國家",
"Option": {
"1": {
"Display": "印度"
},
"2": {
"Display": "美國"
},
"3": {
"Display": "英國"
}
}
},
"ES-ES": {
"Question": "Seleccionar país",
"Option": {
"1": {
"Display": "India"
},
"2": {
"Display": "Estados Unidos"
},
"3": {
"Display": "Reino Unido"
}
}
}
}
}
}
}
我正在使用映射对象映射响应类中的结果字段:
Map<String, Object> result
当我使用
从结果中获取“Q1”后尝试获取翻译时Map<String,Object> translations = (Map<String,Object>)questionDetails.get("Transalations");
每当我遇到没有翻译的问题时,我都会收到 ClassCastException,指出 ArrayList 无法转换为 LinkedHashMap。
“翻译”:[]
如何映射这两个不同的对象。我知道 instanceOf 但不想使用它。
最佳答案
使用“instanceOf”是在 java 中执行此操作的唯一选项。 Jackson 在底层使用相同的方法来解析数字、对象等。
您还可以为响应指定一个类并创建自定义反序列化器,无论如何都应该使用“instanceOf”。
关于java - API针对不同场景返回不同的Object类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60167168/