Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.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和Gson从Json获取对象列表_Java_Json_Gson - Fatal编程技术网

如何使用Java和Gson从Json获取对象列表

如何使用Java和Gson从Json获取对象列表,java,json,gson,Java,Json,Gson,我尝试读取Json文件并将其转换为Java对象,我有以下Java代码来读取Json: class Item { String name; int itemId; Date AddTime; String group; } Gson gson = new Gson(); gson.fromJson(jsonFile, new TypeToken<Map<String, ArrayList<Item>>>() {}.getType

我尝试读取Json文件并将其转换为Java对象,我有以下Java代码来读取Json:

class Item {
    String name;
    int itemId;
    Date AddTime;
    String group;
}

Gson gson = new Gson();
gson.fromJson(jsonFile, new TypeToken<Map<String, ArrayList<Item>>>() {}.getType());
我得到以下信息:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1

我是Java新手,问题出在哪里?如何解决?

我不确定这是否是您需要的,但我认为解决方案可能是这样的

根据您的数据集。在每个项目的内部都有一个带有测试的arrayList(test1、test2…),因此您需要这样的内容:

    class Item {
       ArrayList<Test> tests;
    }

    class Test{
       String name;
       int itemId;
       Date AddTime;
       String group;
    }
类项目{
阵列列表测试;
}
课堂测试{
字符串名;
int itemId;
日期和时间;
字符串组;
}

看起来你的文件不是真正以
{
开头的。你可能想检查它是否有不可见的字符(可能是UTF-8 BOM?@Aaron抱歉,我不知道你的意思错误是抱怨GSON遇到的第一个字符不是
{
,但是你发布的文件明显以
开头{
。您应该检查您是否确实在读取您认为是读取的文件,但除此之外,文件开头可能有不可见的字符可以解释错误。您可以使用十六进制编辑器或带有“显示所有/控制字符”的文本编辑器检查是否存在这些字符函数
但在第1行是字符串
,意味着您在JSON文本的最开始有一个引号字符,而不是
{
字符也
int itemId;Date AddTime;
字段可能不起作用…JSON中的每个字段都只是文本,您没有给GsonI一个日期解析器,我尝试了@ratzip中的示例(gson版本2.8.5)。给定的示例没有任何错误,因此我认为他不必更改任何内容。
    class Item {
       ArrayList<Test> tests;
    }

    class Test{
       String name;
       int itemId;
       Date AddTime;
       String group;
    }