当前位置: 首页 > 知识库问答 >
问题:

JSON对象的字段有时是数组

经和歌
2023-03-14

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

问题:如何根据找到的内容将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"

})@生成(“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
.

}

共有1个答案

鲁洋
2023-03-14

使用列表类型的单个字段,并激活ACCEPT\u single\u VALUE\u AS\u ARRAY功能

YourTargetClass result = mapper.reader(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
                         .forType(YourTargetClass.class)
                         .readValue(json);
 类似资料:
  • 问题内容: 我正在使用一个API,该API对特定字段的响应有时是对象,有时是对象数组。 我创建了一个结构以解组json响应,并且效果很好。但是,在json响应包含对象数组的情况下,解组显然会失败。我该如何处理Go中的这种情况? 我考虑过创建该结构的2个版本,然后以某种方式确定我返回了哪个实例,但这感觉很浪费。我也尝试过将其编组为map [string] instance {},但我有些迷茫,不确定

  • 我有一个非常标准的Java POJO。让我们称之为狗: 狗java有一系列字段。在Java中,约定说字段名应该以小写开头。这意味着我有: 公共字符串名称 公共字符串狗型 公共弦重量 同时,我对我的JSON格式有一个要求,即JSON成员(名称、dogType和权重)的开头都要用大写字母书写,即名称、dogType和权重。 我在利用杰克逊。 如果我使用下面的标准序列化代码,我得到的JSON成员名称与它

  • 我有两条不同的骆驼路线。 1) 和2) SomeClass和SomeOtherClass都有一个名为timestamp的字段,其类型为java.time.ZonedDateTime。 在第一条路线中,我传递单个对象,它解组没有错误。在第二条路线中,我传递一个对象列表,但它不起作用: com.fasterxml.jackson.databind.exc.InvalidDefinitionExcept

  • 问题内容: 如何按其字段之一(例如或)对对象数组进行排序? 问题答案: 使用usort,这是从手册改编而成的示例: 您还可以将任何callable用作第二个参数。这里有些例子: 使用匿名函数(来自PHP 5.3) 从班级内部 使用箭头函数(来自PHP 7.4) 另外,如果要比较数字值,则应使用“比较”功能。

  • 问题内容: 在执行过程中,您将json解组为结构。问题是我有一个api,可能会在请求之间更改键值的类型。 例如,可能是内联对象的对象如下: 而且还可以通过键指向对象,如下所示: 可以内联某些对象,但是可以从多个位置引用其他对象。 在javascript或python中这不是问题。只需检查类型。 解组和解析这两个对象的惯用方式是什么?是反映的唯一方法吗? 问题答案: 您可以将此JSON解组为如下结构

  • 问题内容: 我从API获取的数据返回一个对象,但是当有多个对象时,它将在同一键中返回一个数组。使用我正在使用的当前模型(结构),显示数组时解码失败。 这些结果是随机排序的,这意味着我不知道何时将对象或数组提供给我。 有没有一种方法可以创建一个模型,该模型考虑到这一事实,并且可以为值(“ String”或“ [String]”)分配正确的类型以进行转换,从而继续解码而不会出现问题? 这是返回对象的示