Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.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
将JSON解析为java对象_Java_Json - Fatal编程技术网

将JSON解析为java对象

将JSON解析为java对象,java,json,Java,Json,我试图通过从JSON文件中检索类别项列表来将JSON解析为java对象,但出现如下错误: 错误: Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token at [Source: java.io.StringReader@6be46

我试图通过从JSON文件中检索类别项列表来将JSON解析为java对象,但出现如下错误:

错误:

Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token
     at [Source: java.io.StringReader@6be46e8f; line: 1, column: 1]
以下是检索类别对象的代码:

public ArrayList<Category> getAllTasksFromFile(String jsonString) throws JsonParseException, JsonMappingException, IOException {
     ObjectMapper mapper = new ObjectMapper();
                mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

     ArrayList<Category> allTasks = mapper.readValue(jsonString, new TypeReference<ArrayList<Category>>() {});

     return allTasks;
Category.java

    public class Category {

    private List<Task> task;
    private List<Task> floatTask;
    private List<Task> event;

    public List<Task> getTask() {
        return task;
    }

    public void setTask(List<Task> task) {
        this.task = task;
    }

    public List<Task> getFloat() {
        return floatTask;
    }

    public void setTaskType(List<Task> floatTask) {
        this.floatTask = floatTask;
    }

    public List<Task> getEvent() {
        return event;
    }

    public void setEvent(List<Task> event) {
        this.event = event;
    }
}

有人知道问题出在哪里吗?我需要检索类别列表。

首先,您需要一个包含类别列表的包装器。并且您的方法应该期望该包装器的列表

这是包装纸

import java.util.List;

public class CategoryWrapper {

    private List<Category> category;

    public List<Category> getCategory() {
        return category;
    }

    public void setCategory(List<Category> category) {
        this.category = category;
    }
}
我们定义了我们的
CategoryWrapper
来表示该对象。根据你的JSON
分类
也是一个对象数组。然后创建
Category
来表示该对象

[ {
  "category" : [{...},{...}...]
} ]
Category
有三个不同的属性,分别命名为
task
floatTask
event
。每个属性也由对象数组表示

[ {
  "category" : [{
                  "task":[{...},{...}...],
                  "floatTask":[{...},{...}...],
                  "event":[{...},{...}...]
                },
                {...}
               ]
} ]
该对象在java中定义为
Task
。每个
任务
都有一些属性,如提醒、结束日期等

[ {
  "category" : [{
                  "task":[{
                        "reminder" : 123,
                        "endDate" : "-1",
                        "name" : "Do homework",
                        "description" : "Do it now",
                        "startTime" : -1,
                        "endTime" : -1,
                        "priority" : 5,
                        "isDone" : false,
                        "startDate" : "-1"
                   }],
                  "floatTask":[{...},{...}...],
                  "event":[{...},{...}...]
                },
                {...}
               ]
} ]

它们中的每一个都可以显示为java对象。您不需要创建更多的类。

请描述您希望如何将JSON映射到
ArrayList>
。我希望有一个类别列表(具有不同的类别名称),其中每个类别包含3种类型的任务列表-任务、浮动任务和事件。每个列表都包含名为Task的对象。我已经更新了JSON代码供您参考;因为我怀疑这可能是错误的。抱歉,因为今天是我第一次学习JSON。问题是您的JSON没有映射到
ArrayList
,甚至没有关闭。描述JSON的每个嵌套成员以及它与
ArrayList
的关系,你会发现你的问题。我也有类似的问题
[ {
  "category" : ...
} ]
[ {
  "category" : [{...},{...}...]
} ]
[ {
  "category" : [{
                  "task":[{...},{...}...],
                  "floatTask":[{...},{...}...],
                  "event":[{...},{...}...]
                },
                {...}
               ]
} ]
[ {
  "category" : [{
                  "task":[{
                        "reminder" : 123,
                        "endDate" : "-1",
                        "name" : "Do homework",
                        "description" : "Do it now",
                        "startTime" : -1,
                        "endTime" : -1,
                        "priority" : 5,
                        "isDone" : false,
                        "startDate" : "-1"
                   }],
                  "floatTask":[{...},{...}...],
                  "event":[{...},{...}...]
                },
                {...}
               ]
} ]