【问题标题】:Json to java object conversion using jackson when the key value is changing当键值发生变化时,使用jackson将Json转换为java对象
【发布时间】:2021-10-19 12:35:48
【问题描述】:

我正在使用 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;

想知道解决我的问题的最佳方法。

【问题讨论】:

  • 您对这里的期望是什么。这里 0,1,2..17 是字段。根据在线转换,它只是正确的。
  • 我想使用字符串变量而不是那些数字。我想我可以使用 HashMap ,其中所有这些数字都是键,值是菜单项。不确定。
  • 在这种情况下,我必须忽略标签。

标签: json java-8 jackson jackson-databind


【解决方案1】:

选项 1。如果您定义数据类,例如

    public class Base {
        public Menu menu;
    }
    public class Menu {
        public String header;
        public List<Map<String, String>> items;
    }

使用 Jackson 进行标准反序列化

 Base object = new ObjectMapper().readValue(jsonSrc, Base.class);

将生成对象,其中项目的每个元素都是 Map,其中包含 ,"label","Zoom Out"> 等对。

选项 2。 您可以定义类 Item 像

    public class Item {
        public int id;
        public String label;
    }

并实现自定义JsonDeserializer 以正确填充Item 的属性。

【讨论】:

    猜你喜欢
    • 2013-03-25
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    • 2020-06-14
    • 2017-02-04
    • 1970-01-01
    相关资源
    最近更新 更多