Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JSON对象反序列化哪些字段可以是不同类型的_Java_Json - Fatal编程技术网

Java 使用JSON对象反序列化哪些字段可以是不同类型的

Java 使用JSON对象反序列化哪些字段可以是不同类型的,java,json,Java,Json,我有以下json文件: { "authors": [{"id":"author7", "book":[ [ { "value":{"pages":123}}]]}, { "id": "author3", "book": [ [ { "value": {

我有以下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类时遇到了问题

我理解,在用java类映射json文件时,Authors类应该具有as字段

public class Authors{
    private String authorId;
    private Book book;
}
教材应该是这样的

public class Book {
        
    private List<Values> values
    
    public Book() {
    }
}
这是绘制地图的正确方法吗?因为我看到,如果我创建一个值对象,它会要求我修改构造函数,或者为来自Json的每个不同对象创建一个新的构造函数


感谢您的阅读和帮助

简单的解决方法是按“object”类型定义值,如下所示:

public class Book {           
    private List<Object> values
}
公共类书籍{
私有列表值
}
这样,当JSON中不存在具有null值的属性时,您就不会遇到这样的问题。此外,即使引入了新的属性(或者可能没有在values类下定义,正如您在上面所做的那样,导致这些属性没有映射到对象),JSON也会被完全解析到对象中


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

欢迎使用StackOverflow。请不要在问题正文中发布半个/不完整的JSON结构。在本例中,您缺少JSON结构的结束,JSON的开始部分也有点混乱。如果在这里发布JSON太长,请删除重复的数据和问题,更新详细信息。谢谢。我认为现在更可读。我像你说的那样写了它,但它告诉我不能解析符号“any'use'Object'类型”“any”在javascript中使用。谢谢,现在我明白了。类值应该由JSON中的“values”接受的三种类型的参数填充?像这样:``公共类值{private int pages;private Boolean bool;private String title;public Values(){}}``这里,我解释的是,您有两个选项来处理这个问题。一个,正如我提到的,您可以使用Object—一种泛型类型,用于捕获所有不同形式的值对象(作为泛型,对象类型没有模式/结构)。这样,对于“value”的每个实例,您将拥有完全符合JSON值模式的通用对象。另一个是,您可以继续定义“value”类,但其每个属性都使用默认值(即null)定义,因此,即使value的模式是变量,只有包含JSON中的值的属性才会映射到具有该值的对象(仅针对匹配属性)。JSON中不存在该特定“值”实例的其余属性将为null。
public class Book {           
    private List<Object> values
}