【问题标题】:JSON Objects with Field that is sometimes an Array带有字段的 JSON 对象,有时是一个数组
【发布时间】:2021-05-06 23:21:46
【问题描述】:

问题:有时访问请求目标是单个目标,有时是数组

问题:如何根据找到的内容让 Jackson 反序列化为单个目标或数组?

单一目标 JSON

                                    "access_request": {
                                    "targets": {
                                        "target": {
                                            "@type": "ANY",
                                            "id": 1189118
                                        }
                                    }
                                } 

目标 JSON 数组

                                    "access_request": {
                                    "targets": {
                                        "target": [
                                            {
                                                "@type": "Object",
                                                "id": 1189167,
                                                "object_name": "OUTSIDE",
                                                "object_type": "acl",
                                                "object_details": "2.2.2.2",
                                                "management_id": 29,
                                                "management_name": "ace2"
                                            },
                                            {
                                                "@type": "Object",
                                                "id": 1189168,
                                                "object_name": "ONRAMP",
                                                "object_type": "acl",
                                                "object_details": "1.1.1.1",
                                                "management_id": 29,
                                                "management_name": "ace1"
                                            }
                                        ]
                                    } 
                                }

“目标”POJO:

@JsonPropertyOrder({
"target"

}) @Generated("jsonschema2pojo") 公共类目标实现可序列化 {

@JsonProperty("target")
private Target target = new Target();//How can I make Jackson deserialize to either a Single Target or an Array<Target> depending on what is found?
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
.
.//Getters, Setters
.

}

【问题讨论】:

    标签: java json jackson-databind


    【解决方案1】:

    使用 List 类型的单个字段,并激活功能 ACCEPT_SINGLE_VALUE_AS_ARRAY

    YourTargetClass result = mapper.reader(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
                             .forType(YourTargetClass.class)
                             .readValue(json);
    

    【讨论】:

    • 此设置是否允许将 Target 下的任何项目(例如 Fields)也读入数组?
    • 是的,您可以阅读 YourTargetClass 中定义的所有内容
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-15
    相关资源
    最近更新 更多