Я пытаюсь проанализировать файл JSON, который выглядит следующим образом:
[
{"character": "㐭", "definition": "blabla", "pinyin": ["lin"]},
// some more
{"character": "㐱", "definition": "blabla", "pinyin": ["zhen"]}
]
P.S. У меня нет // some more
в файле json
Находится в папке res / raw / dictionary.json. Но я получаю исключение Expected BEGIN_ARRAY but was STRING at line 1 column 1 path $
. Я получаю данные, как это:
InputStream is = getResources().openRawResource(R.id.dictionary);
Writer writer = new StringWriter();
char[] buffer = new char[1024];
try {
Reader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
int n;
while((n = reader.read(buffer)) != -1) {
writer.write(buffer, 0, n);
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
finish(); // For now just finishing activity, gonna add handling later
} catch (IOException e) {
e.printStackTrace();
finish();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
finish();
}
}
String json = writer.toString();
JSONArray dictionary = new JSONArray(json);
// Do stuff with Array
Сначала я подумал, что ошибка возникла из-за способа, которым я использую для анализа json, но когда я закомментировал, а затем удалил весь механизм синтаксического анализа, он все еще показывал мне эту ошибку. Похоже, это происходит, когда Android загружает ресурсы, но я не уверен. Я попытался изменить JSON следующим образом:
{
"characters": [
{"character": "㐭", "definition": "blabla", "pinyin": ["lin"]},
// some more
{"character": "㐱", "definition": "blabla", "pinyin": ["zhen"]}
]
}
И смена механизма разбора
// Get resources
String json = writer.toString();
JSONObject dictionaryObj = new JSONObject(json);
JSONArray dictionary = dictionaryObj.getJSONArray("characters");
Но это тоже не помогло. Что здесь может быть не так?
N.B. : Проблема в том, что я не могу даже протестировать какие-либо решения, потому что действие не загружено, ошибка появляется во время сборки Gradle, в разделе «Выполнение задач»