Я постоянно получаю Expected BEGIN_TYPE but was STRING at line 1 column 1 path $
ошибку. Я читал об этой ошибке, но испытываю что-то другое.
Когда я пытаюсь использовать gson.fromJson()
для строки JSON
, которую я создал в своем приложении, она прекрасно компилируется.
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
, и они действительны).
Вот JSON при записи в файл с именем testingArray.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);
Не компилируется и выдает вышеупомянутую ошибку.
Я не понимаю, почему, потому что когда я запускаю fromJson
на POJO
, как JSON
, это работает. Но если я запускаю те же данные JSON из локального файла, это не сработает. Он всегда читается как строка, даже если он начинается с скобок.