【问题标题】:Safely Ignore JSON Property that Contains All Other Objects安全地忽略包含所有其他对象的 JSON 属性
【发布时间】:2018-02-11 03:38:27
【问题描述】:

我正在使用 Spring Boot,并且正在使用 Jackson 解析 JSON 文件。文件是这样的

{
    "grouping": [
        {
            "obj1": "value1",
            "obj2": "value2",
            "obj3": "value3",
            "obj4": "value4"
        },
        {
            "obj1": "value1",
            "obj2": "value2",
            "obj3": "value3",
            "obj4": "value4"
            },
        },
        {
            "obj1": "value1",
            "obj2": "value2",
            "obj3": "value3",
            "obj4": "value4"
            },
        }
    ]
}

当我用 Jackson 的 ObjectMapper 解析它时,它会抛出一个错误,说我没有使用 @JsonProperty 定义“分组”。问题是我不关心这个初始标题,但如果我忽略它(使用@JsonIgnoreProperties("grouping"),那么其余数据将被跳过,我目前最终得到一个包含默认构造函数值的对象.

我需要创建一个丢弃变量还是需要重组我的对象/类?

【问题讨论】:

  • 好吧,你有一个带有分组数组的对象......只需解析一个 JSON 数组......不要创建一个对象

标签: java json spring jackson jackson-databind


【解决方案1】:

有两种可能:

1) 创建变量grouping 并将结果解析为对象: 例如:

ObjectMapper mapper = new ObjectMapper();
Holder holder = mapper.readValue(content, Holder.class);
ObjHolder[] objHolder = holder.getGrouping().getObjHolderArray();

2) 将整个 JSON 读取为 JsonNode,导航到 grouping 并将其内容解析为数组。例如:

ObjectMapper mapper = new ObjectMapper();
JsonNode actualObj = mapper.readTree(content);
JsonNode array = actualObj.get("grouping");
ObjHolder[] objHolders = mapper.treeToValue(array, ObjHolder[].class);

【讨论】:

  • 这是正确的,特别需要:JsonNode jsonNode = objectMapper.readTree("file_name")); String arrayString = jsonNode.get("grouping").toString(); MyArraylist= objectMapper.readValue(arrayString, new TypeReference<ArrayList<MyClass>>(){});
猜你喜欢
  • 1970-01-01
  • 2018-12-11
  • 2013-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-28
  • 1970-01-01
  • 2021-08-16
相关资源
最近更新 更多