Я пытаюсь разобрать большой файл 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:
а потом выдает весь файл после двоеточия.
И какой парсер JSON это будет?




изменить на
// 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());
}
вы получаете массив как объект