Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.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 Google Gson将每个JSON本地文件视为字符串,即使不是字符串_Java_Json_Io_Gson_Json Deserialization - Fatal编程技术网

Java Google Gson将每个JSON本地文件视为字符串,即使不是字符串

Java Google Gson将每个JSON本地文件视为字符串,即使不是字符串,java,json,io,gson,json-deserialization,Java,Json,Io,Gson,Json Deserialization,我不断地得到预期的开始类型,但在第1行第1列路径$处出现字符串错误。我读过关于那个错误的文章,但我经历了一些不同的事情 当我尝试在我的应用程序中创建的JSON字符串上使用gson.fromJson()时,它编译得很好 ArrayList<MyCar> cars = new ArrayList<>(); cars.add(new MyCar()); cars.add(new MyCar()); String json = gson.t

我不断地得到
预期的开始类型,但在第1行第1列路径$
处出现字符串错误。我读过关于那个错误的文章,但我经历了一些不同的事情

当我尝试在我的应用程序中创建的
JSON
字符串上使用
gson.fromJson()
时,它编译得很好

     ArrayList<MyCar> cars = new ArrayList<>();
     cars.add(new MyCar());
     cars.add(new MyCar());
     String json = gson.toJson(cars);
它显然是以括号而不是引号开始的

但这是:

 Type carList = new TypeToken<ArrayList<MyCar>>(){}.getType();
 ArrayList<MyCar> myCars = gson.fromJson(basePath + "testingArray.json", carList); 
Type carList=new-TypeToken(){}.getType();
ArrayList myCars=gson.fromJson(basePath+“testingArray.json”,carList);
不编译并给出上述错误


我很惊讶为什么,因为当我在
POJO
上像
JSON
一样运行
fromJson
时,它就工作了。但是如果我从本地文件运行相同的JSON数据,它就不起作用。它总是将其作为字符串读取,即使它以括号开头。

文件路径按字面意义被视为
JSON
有效负载,因此您会看到此异常。您需要根据文件路径创建
读卡器

try (FileReader jsonReader = new FileReader(basePath + "testingArray.json")) {
    Type carList = new TypeToken<ArrayList<MyCar>>(){}.getType();
    List<MyCar> myCars = gson.fromJson(jsonReader, carList); 
}
try(FileReader jsonReader=newfilereader(basePath+“testingArray.json”)){
类型carList=newTypeToken(){}.getType();
List myCars=gson.fromJson(jsonReader,carList);
}

它可以工作!还有,为什么GSON要求您在FileReader中封装路径,而Jackson没有这样做?@Fletcher,这是因为。当您提供
String
变量
Gson
时,将其视为原始
JSON
。如果您想从文件或其他来源提供
JSON
,您需要使用
Reader
来明确应该使用
stream
 Type carList = new TypeToken<ArrayList<MyCar>>(){}.getType();
 ArrayList<MyCar> myCars = gson.fromJson(basePath + "testingArray.json", carList); 
try (FileReader jsonReader = new FileReader(basePath + "testingArray.json")) {
    Type carList = new TypeToken<ArrayList<MyCar>>(){}.getType();
    List<MyCar> myCars = gson.fromJson(jsonReader, carList); 
}