java - API针对不同场景返回不同的Object类型

标签 java json jackson

我正在 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/

相关文章:

java - Java HashMap 会产生死锁吗?

java(安卓): try compressed I/O and failed

java - Java 中的方法限制

java - 如果服务器不支持 SSLv3,为什么 Java SSL 套接字连接会严重失败

json - 将XmlSlurper GPathResult转换为JSON字符串

C# 使用 JavaScriptSerializer.DeserializeObject 反序列化 JSON

java - Jackson在同一个类中根据json映射不同的属性

java - 如何映射包含名为 long 和 Short 的成员的 JSON 字符串

java - 从 Kafka Streams 反序列化对象时出错

java - Jackson 树结构的序列化/反序列化