【问题标题】:Serializing a JSON response with dynamic keys使用动态键序列化 JSON 响应
【发布时间】:2019-05-16 14:55:46
【问题描述】:

我有以下需要序列化为 POJO 对象的 Json 字符串:

{"pump_6":{"name":"Pump 6","value":"tequila","pin":25},"pump_5":{"name":"Pump 5","value":"vodka","pin":24},"pump_4":{"name":"Pump 4","value":"oj","pin":23},"pump_2":{"name":"Pump 2","value":"gin","pin":27},"pump_1":{"name":"Pump 1","value":"rum","pin":17},"pump_3":{"name":"Pump 3","value":"coke","pin":22}}

如您所见,键是动态的(pump_6、pump_5)。我尝试了不同的解决方案,但似乎没有任何工作可以将其序列化为 POJO。

我尝试过这样的事情

for (Object o : map.keySet()) {
            String key = (String) o;
            System.out.println(key);
            Map<String, JsonElement> value = (Map<String, JsonElement>) map.get(key);
            System.out.println(value); //prints {Updated=week, Time=12pm} for first
            Pump pump = new Pump(value.get("name").toString(), value.get("value").toString(),  value.get("pin").getAsInt());
            arrayList.add(pump);

以下是我的泵类

public class Pump {
    @JsonProperty("name")
    public String name;
    @JsonProperty("pin")
    public int pin;
    @JsonProperty("value")
    public String value;

    public Pump(String name, String value, int pin) {
        this.name = name;
        this.value = value;
        this.pin = pin;
    }

}

有人知道如何将此字符串序列化为 pojo 的吗?

【问题讨论】:

  • 为什么不直接使用 Gson?
  • 谢谢,现在修复了。上面发布的解决方案

标签: java android json serialization gson


【解决方案1】:

在上面关于 gson 的评论之后,我找到了解决问题的方法

ArrayList<Pump> pumps = new ArrayList<>();
Gson gson = new Gson();
Type mapType = new TypeToken<Map<String, Pump>>(){}.getType();
Map<String, Pump> result = gson.fromJson(jsonString, mapType);

for(Map.Entry<String, Pump> entry : result.entrySet()){
    System.out.println(entry.getValue().name);
    Pump pump = new Pump(entry.getValue().name, entry.getValue().value, entr.getValue().pin);
    pumps.add(pump);
}

【讨论】:

    猜你喜欢
    • 2023-01-17
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    • 2020-03-09
    • 2021-04-19
    • 2019-07-03
    相关资源
    最近更新 更多