java - 使用 Jackson 解析嵌套 JSON 时,首选方法是 ArrayNode 还是 TypeReference?
问题描述
我必须解析以下 JSON。我有两种解决方案,我正在尝试确定哪种方法是首选方法。
{
"created": true,
"entries": [{
"NewValue": "test1",
"Operation": "ADD",
"FieldIdentifier": "name",
"FieldType": "AN",
"FieldLength": 35,
"OriginalValue": ""
},
{
"NewValue": "test2",
"Operation": "ADD",
"FieldIdentifier": "age",
"FieldType": "AN",
"FieldLength": 35,
"OriginalValue": "testOrig"
}]
}
解决方案1:使用readTree将JSON获取为我们可以查询的JsonNode对象,然后转换为列表
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonObject = mapper.readTree(form.getFieldList());
ArrayNode fieldListArray = (ArrayNode) jsonObject.get("fieldList");
if (fieldList != null) {
FieldDefType[] listOfFieldDefs = mapper.convertValue(fieldList, FieldDefType[].class);
if (listOfFieldDefs != null) {
request.setFieldList(Arrays.asList(listOfFieldDefs));
}
}
解决方案 2:使用 TypeReference 从 JSON 映射到 POJO 对象,然后从那里检索我的字段。
FieldListModel fieldListModel = new FieldListModel();
ObjectMapper mapper = new ObjectMapper();
fieldListModel = mapper.readValue(form.getFieldList(), new FieldListTypeReference());
request.setFieldList(fieldListModel.getEntries());
// At bottom of this class I have my named static inner class - Sonar scan requested this
static class FieldListTypeReference extends TypeReference<FieldListModel> {}
我倾向于解决方案 1,因为不需要命名的静态内部类,而且我在 Stack Overflow 上听说 TypeReference 很慢。我能想到的解决方案 1 的唯一问题是需要更多的空检查和更多的代码行。
解决方案
推荐阅读
- gitlab - 在 Gitlab CI 的作业之间共享不同的存储库
- c# - 如何在 C# 中为两个条件 IF 语句使用全局变量
- html - 对象拟合图像不均匀收缩
- hadoop - 如何更改临时hdfs目录的权限
- java - 在身份验证 Spring Security + WebFlux 期间抛出和处理自定义异常
- python-3.x - 如何在 Python 中获取用于数据分析的历史财务数据?
- vhdl - 如何为不同的寄存器总线宽度选择时钟跨域的触发器数量?
- flutter - Flutter Container 的 BoxConstrains 未按预期工作
- java - 如何将数据[]从线程传递到活动
- typescript - 使用打字稿将elasticjs查询转换为节点应用程序中的本机弹性搜索DSL查询