如何反序列化没有字段名的 JSON
Posted
技术标签:
【中文标题】如何反序列化没有字段名的 JSON【英文标题】:how to deserealize JSON without field names 【发布时间】:2022-01-19 22:15:34 【问题描述】:我调用了一个返回 JSON 的 REST 服务,我正在尝试对其进行反序列化(将其转换为实体),但问题是它没有匹配的字段名称。 JSON 是这样的:
"text1": "",
"text2": null,
"days": [
"20211217":
"07:00":
"id": "1187067",
"cupo": 9
,
"08:00":
"id": "1187068",
"cupo": 10
,
"20211219":
"07:00":
"id": "1187077",
"cupo": 10
,
"08:00":
"id": "1187078",
"cupo": 10
]
您可以看到它有一些字段,如 text1、text2、days、id 和 cupo,问题是如何映射日期文本 (20211217,20211219) 和小时文本。我该如何操作这些数据?
【问题讨论】:
你的预期输出是什么? 放入地图 你在使用像 Gson 或 Jackson 这样的库吗? 我正在使用杰克逊。也许我没有解释清楚,那些日期和小时字段是随机的。我想把这些数据放在一个实体中,该实体有一个日期字段和一个带有小时、id 和 cupo 的列表 自己动手吧。加载 JSON,遍历原始结果,并将适当的位填充到适当的位置。这样做可能比击败某些框架提交“为你做”要快得多。 【参考方案1】:您可以按如下方式对 JSON 进行建模:
import java.util.List;
import java.util.Map;
public class YourClass
private String text1;
private String text2;
private List<Map<String, Map<String, YourOtherClass>>> days;
public YourClass(String text1, String text2, List<Map<String, Map<String, YourOtherClass>>> days)
this.text1 = text1;
this.text2 = text2;
this.days = days;
public String getText1()
return text1;
public void setText1(String text1)
this.text1 = text1;
public String getText2()
return text2;
public void setText2(String text2)
this.text2 = text2;
public List<Map<String, Map<String, YourOtherClass>>> getDays()
return days;
public void setDays(List<Map<String, Map<String, YourOtherClass>>> days)
this.days = days;
然后将另一个类建模id
和cupo
如下:
public class YourOtherClass
private String id;
private int cupo;
public YourOtherClass(String id)
this.id = id;
public String getId()
return id;
public void setId(String id)
this.id = id;
public int getCupo()
return cupo;
public void setCupo(int cupo)
this.cupo = cupo;
【讨论】:
以上是关于如何反序列化没有字段名的 JSON的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Jackson json 注释枚举字段以进行反序列化
检测反序列化的对象是不是缺少 Json.NET 中 JsonConvert 类的字段
如何反序列化包含 GSON 库生成的 LocalDate 字段的 JSON