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);
}