首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用JSON对象进行反序列化,其中字段可以是不同类型的

使用JSON对象进行反序列化,其中字段可以是不同类型的
EN

Stack Overflow用户
提问于 2021-04-02 16:08:20
回答 1查看 45关注 0票数 0

我有以下json文件:

代码语言:javascript
运行
复制
{
"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类进行映射时遇到了问题。

我知道,在用java类映射json文件时,Authors类应该有as字段。

代码语言:javascript
运行
复制
public class Authors{
    private String authorId;
    private Book book;
}

课本应该是这样的

代码语言:javascript
运行
复制
public class Book {
        
    private List<Values> values
    
    public Book() {
    }
}

但是,类值又如何呢?

代码语言:javascript
运行
复制
public class Values{
        
    private int pages;
    private Boolean bool;
    private String title;

    
    public Values() {
    }
}

这是正确的映射方式吗?因为我看到,如果我创建一个值对象,它会要求我修改构造函数,或者为来自Json的每个不同对象创建一个新的构造函数

感谢您的阅读和帮助!

EN

回答 1

Stack Overflow用户

发布于 2021-04-02 17:48:23

简单的解决方法是通过类型'object‘来定义值,

代码语言:javascript
运行
复制
public class Book {           
    private List<Object> values
}

这样,当JSON中不存在null值的属性时,您就不会遇到这样的问题。此外,JSON将被完全解析为一个对象,即使引入了新的属性(或者可能没有在values类下定义这些属性,就像您在上面所做的那样,导致这些属性没有映射到对象)。

然而,当你使用' object‘时,要注意使用这个解析对象的逻辑。尽管您可以像在JSON中一样从对象访问属性,但是您必须有条件地检查nessacary属性是否首先存在于每个逻辑上下文中,以避免可能出现的未定义的值错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66916311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档