java - 使用 JSON 对象反序列化哪些字段可以是不同类型
问题描述
我有以下 json 文件:
{
"authors":
[{"id":"author7",
"book":[
[
{
"value":{"pages":123}}]]},
{
"id": "author3",
"book": [
[
{
"value": {
"title": "LOTR"
}
},
{
"value": {
"boolean": false
}
},
],
[
{
"value": {
"pages": 350
}
},
{
"value": {
"boolean": false
}
},
],
[
{
"value": {
"boolean": false
}
},
{
"value": {
"pages": 150
}
},
]
]
},
}
我希望能够创建 Author 的对象,但是在将 Json 文件与我创建的 Java 类映射时遇到问题。
我知道,在将 json 文件与 java 类映射时,Authors 类应该具有作为字段
public class Authors{
private String authorId;
private Book book;
}
课本应该是这样的
public class Book {
private List<Values> values
public Book() {
}
}
但是类值呢?
public class Values{
private int pages;
private Boolean bool;
private String title;
public Values() {
}
}
这是映射它的正确方法吗?因为我看到如果我创建一个 Values 对象,它会要求我修改构造函数或为来自 Json 的每个不同对象创建一个新的构造函数
感谢您的阅读和帮助!
解决方案
简单的出路是通过类型“对象”来定义值,
public class Book {
private List<Object> values
}
这样,当 JSON 中不存在属性时,您就不会遇到具有空值的属性的问题。此外,即使引入了新属性(或者可能未在 values 类下定义,正如您在上面所做的那样导致那些未映射到对象),JSON 也会被完全解析为对象。
但是,当您使用“对象”时,请注意使用此解析对象的逻辑。虽然,您可以确保像在 JSON 中一样从对象访问属性,但您必须有条件地检查每个逻辑上下文中是否首先存在 nessacary 属性以避免可能的未定义值错误。
推荐阅读
- json - 尝试解析 JSON 时无法将类型“MRData”的值分配给类型“[F1Data]”
- artificial-intelligence - VAE 输入数据缩放
- python - 拉错了链接。美丽的汤,蟒蛇
- mysql - 获取两个表列的总和
- ionic-framework - Ionic 从 http.get 检索自定义标头参数
- c# - 如何使用 Entity Framework 6 在字段中存储对象列表
- r - 使用 excel.link 将 xlsb 文件导入 R 时出错
- tomcat - 如何在嵌入式 Tomcat 上部署 Web 应用程序 - JavaEE
- jmeter - jmeter beanshell调用jmeter函数
- python - 为什么 o 对 db 进行查询时,Flask-SocketIO (With Gevent) 会暂停?