解析json错误:java.lang.IllegalStateException:不是JSON对象:

时间:2019-03-07 04:54:26

标签: java 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
    }
  } ]

我想获取其“名称”值与字符串匹配的城市的ID:

    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: 然后在冒号后面吐出整个文件。

2 个答案:

答案 0 :(得分:4)

更改为

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

因为它在顶层包含一个数组

答案 1 :(得分:1)

尝试以下给定的代码来处理这两种情况

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