【发布时间】:2021-10-06 04:49:16
【问题描述】:
我以下面的json为例:
{
"success": true,
"data": {
"1": {
"amount": "1"
},
"2": {
"amount": "98"
}
}
}
不幸的是,我无法控制传入的 JSON 结构。我一直在尝试找到一种使用 JSONProperties 将这些映射到 DTO 的方法,但是我无法使用数字声明属性。
我也尝试过使用 JSONObject 迭代 JSON,但我似乎无法让它通过所有子节点,只是顶层。
JSONObject payload = new JSONObject(jsonString);
JSONObject newPayload = payload;
Iterator<String> keys = payload.keys();
while (keys.hasNext()) {
String key = keys.next();
if (StringUtils.isNumber(key)) {
newPayload.put("element" + key, payload.get(key));
newPayload.remove(key);
}
}
有没有人遇到过类似的情况并找到了解决办法。
所有这些最终都将 JSON 转换为 XML... 继承了这个平台,没时间重构lol,不是我的选择。
【问题讨论】:
-
技术上说,这些不是数字;它们是一串数字。您是否可以或应该将它们视为数字取决于您对服务合同的了解。
-
我应该说这个的最后部分,这个的最终结果需要转换成 XML,因此需要去掉键名的数字。我将编辑问题
-
数字是否应该是顺序索引,从 1 开始?
-
@chrylis-cautiouslyoptimistic- 是的,被告知它应该始终是 2 个索引,但我正在处理一个非常不可靠的响应,因此试图涵盖可能性。我有一个解决方案,.replace(),但这很糟糕,我现在很好奇。
标签: java json jackson mapping transformation