Ошибка синтаксического анализа json: java.lang.IllegalStateException: не объект JSON:

Я пытаюсь разобрать большой файл json, который содержит кучу городов (ниже приведены первые два города в файле):

  [
  {
    "id": 707860,
    "name": "Hurzuf",
    "country": "UA",
    "coord": {
      "lon": 34.283333,
      "lat": 44.549999
    }
  },
  {
    "id": 519188,
    "name": "Novinki",
    "country": "RU",
    "coord": {
      "lon": 37.666668,
      "lat": 55.683334
    }
  } ]

Я хочу получить идентификаторы городов, значение имени которых соответствует строке:

    JsonParser parser = new JsonParser();

    JsonElement jsontree = parser.parse(new FileReader("C:/Users/kevin/Eclipse-workspace-new/kevinzhou_CSCI201_assignment3/WebContent/city.list.json"));
    JsonElement je = jsontree.getAsJsonObject();
    JsonArray ja = je.getAsJsonArray();
    for (Object o : ja)
    {
        JsonObject city = (JsonObject) o;
        if (cityName == city.get("name").getAsString())
        {
            System.out.println(city.get("id").getAsString());
        }
    }

Однако я получаю следующую ошибку: java.lang.IllegalStateException: Not a JSON Object: а потом выдает весь файл после двоеточия.

вы получаете массив как объект

Ashok Kumar N 07.03.2019 05:58

И какой парсер JSON это будет?

Mike 'Pomax' Kamermans 07.03.2019 05:58
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
3 810
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

изменить на

// JsonElement je = jsontree.getAsJsonObject();
JsonArray ja = jsontree.getAsJsonArray();

поскольку он содержит массив на верхнем уровне

Попробуйте приведенный ниже код для обработки обоих условий

if (jsontree instanceof JsonObject) {
    JsonObject  jobject = new JsonObject(jsontree .getAsJsonObject());
 } else if (jsontree instanceof JsonArray) {
    JsonArray  jarray =  new JsonArray(jsontree .getAsJsonArray());
 }

Другие вопросы по теме