json - 键值更改时使用jackson将Json转换为Java对象
问题描述
我正在使用 Jackson 将 JSONObject 转换为 java。下面是我从 API 获得的 json 消息格式。
{"menu": {
"header": "SVG Viewer",
"items": [
{"0": "Open"},
{"1": "OpenNew", "label": "Open New"},
null,
{"2": "ZoomIn", "label": "Zoom In"},
{"3": "ZoomOut", "label": "Zoom Out"},
{"4": "OriginalView", "label": "Original View"},
null,
{"5": "Quality"},
{"6": "Pause"},
{"7": "Mute"},
null,
{"8": "Find", "label": "Find..."},
{"9": "FindAgain", "label": "Find Again"},
{"10": "Copy"},
{"11": "CopyAgain", "label": "Copy Again"},
{"12": "CopySVG", "label": "Copy SVG"},
{"13": "ViewSVG", "label": "View SVG"},
{"14": "ViewSource", "label": "View Source"},
{"15": "SaveAs", "label": "Save As"},
null,
{"16": "Help"},
{"17": "About", "label": "About Adobe CVG Viewer..."}
]
}}
想知道如何处理消息中的 id 键。它是一个从 0 到 17 的数字。使用在线转换器我得到它如下。
public class Item{
@JsonProperty("0")
public String _0;
@JsonProperty("1")
public String _1;
public String label;
@JsonProperty("2")
public String _2;
@JsonProperty("3")
public String _3;
@JsonProperty("4")
public String _4;
@JsonProperty("5")
public String _5;
想知道解决我的问题的最佳方法。
解决方案
选项 1。如果您定义数据类,例如
public class Base {
public Menu menu;
}
public class Menu {
public String header;
public List<Map<String, String>> items;
}
杰克逊的标准反序列化
Base object = new ObjectMapper().readValue(jsonSrc, Base.class);
将产生对象,其中项目的每个元素都将是一个Map
包含对,如 <"3","ZoomOut">,"label","Zoom Out">。
选项 2。您可以定义类 Item 像
public class Item {
public int id;
public String label;
}
并实现自定义JsonDeserializer
以正确填充 Item 的属性。
推荐阅读
- javascript - 使用 kepresses 和 if 语句来启用和禁用元素
- assembly - 如何在装配臂中打印多个字符串?
- javascript - 使用 Ionic 4 Angular Fire Auth 保护的无限 console.logging
- azure - 创建函数应用时出现“此区域不允许此订阅的缩放操作”错误
- ios - 如何从 A 中减去 UIBezierPath A&B 的交集?
- c# - 在c#中将基类动态转换为子类
- telegram-bot - 使用 SOCKS5 的 Telegram Bot api
- linux - 未从 arm 设备加载 goodix 驱动程序
- javascript - 从 redux store 获取 API 响应并发送响应
- json - 正确转义 JSON 以与 bash 一起使用