java - 使用动态键序列化 JSON 响应
问题描述
我有以下 Json 字符串,我需要将其序列化为 POJO 对象:
{"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 的评论之后,我找到了解决问题的方法
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);
}
推荐阅读
- php - Nginx 全新的 codeigniter 安装在尝试访问控制器时显示 404 Not Found
- karate - 如何使用 TestNG 运行空手道测试运行程序文件?
- angular - 如何使用带电容器的 angular ionic 4 像 TIKTOK APP 一样全屏显示图像和视频
- c# - 表单最大化后如何修复控件位置
- linux - 如何从在 Linux 上运行的 .NET Core 应用程序对 Windows 域用户进行身份验证
- python - 如何成功编译 python 3.x
- sql - 在删除语句postgresql中使用partition by子句
- python - 如果满足条件,则获取列表列表的最大元素
- automated-tests - 仅在一次测试中禁用赛普拉斯中的网络安全
- wiremock - 我可以将 Spring Cloud Contract 定义为代理,并且只为端点子集制作存根吗?