gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:58:40 24 4
gpt4 key购买 nike

我不断收到Expected BEGIN_TYPE but was STRING at line 1 column 1 path $错误。我已阅读有关该错误的信息,但我遇到了不同的情况。

当我尝试在我的应用程序中创建的 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(json, carList);

这也可以编译。

我的问题是,当我尝试读取自己编写或从网络下载的本地文件时(我已在 JsonLint 上运行所有本地文件,并且它们是有效的)。

以下是写入名为 testingArray.json 的文件时的 JSON:

[{
"model": "I3",
"manufacturer": "Audi",
"features": ["wifi", "bluetooth", "charging"]
}, {
"model": "I3",
"manufacturer": "Audi",
"features": ["wifi", "bluetooth", "charging"]
}, {
"model": "I3",
"manufacturer": "Audi",
"features": ["wifi", "bluetooth", "charging"]
}]

它显然以括号而不是引号开头。

但是这个:

 Type carList = new TypeToken<ArrayList<MyCar>>(){}.getType();
ArrayList<MyCar> myCars = gson.fromJson(basePath + "testingArray.json", carList);

无法编译并给出上述错误。

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

最佳答案

文件的路径实际上被视为 JSON 有效负载,因此这就是您看到此异常的原因。您需要根据文件路径创建 Reader:

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

关于java - Google Gson 将每个 JSON 本地文件视为字符串,即使它不是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55791761/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com