Ошибка: ожидаемый BEGIN_ARRAY, но он был STRING в строке 1, столбце 1, пути $ - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь проанализировать файл 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, в разделе «Выполнение задач»

Ответы [ 4 ]

0 голосов
/ 08 января 2019

Хорошо, проблема не в механизме синтаксического анализа JSON, а в ошибке Android Studio, которую я исправил, перезапустив проект.

0 голосов
/ 08 января 2019
   {
      "characters": [
          {"character": "㐭", "definition": "blabla", "pinyin": ["lin"]},
          // some more
          {"character": "㐱", "definition": "blabla", "pinyin": ["zhen"]}
      ]
    }

Для выше Json

JSONObject json = new JSONObject(writter.toString());
String characters = json.getString("characters");
JSONArray array = new JSONArray(characters);
for (int i=0; i < array.length(); i++) {
    JSONObject element = array.getJSONObject(i); 
}

Попробуйте это

0 голосов
/ 08 января 2019

Вместо того, чтобы получать данные как JSONObject в Root, вам нужно проанализировать их как JSONArray для данных ниже:

[
    {"character": "㐭", "definition": "blabla", "pinyin": ["lin"]},
    // some more 
    {"character": "㐱", "definition": "blabla", "pinyin": ["zhen"]}
]

Для таких вышеупомянутых данных разбор будет:

// Get resources
String json = writer.toString();
JSONArray arr = new JSONArray(json);
// Then parse your objects like below
for (int i=0; i < arr.length(); i++) {
    JSONObject character = arr.getJSONObject(i); // this will provide you all json objects to be parse.
}
0 голосов
/ 08 января 2019

Json должен быть: (я удалил // some more)

{
  "characters": [
      {"character": "㐭", "definition": "blabla", "pinyin": ["lin"]},
      {"character": "㐱", "definition": "blabla", "pinyin": ["zhen"]}
  ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...