使用Gson用对象解析JSON但需要排除数组

时间:2016-04-07 14:32:54

标签: java json

我需要解析一个包含Objects的JSON字符串,但是JSON中也可能有Arrays,我不需要它,而且它当前正在崩溃:

com.google.gson.JsonSyntaxException: 
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY

如果我从JSON中删除所有数组,那么使用以下代码解析JSON和我的POJO是完全正常的:

Type type = new TypeToken<Map<String, UsersPOJO>>(){}.getType();
Map<String, UsersPOJO> myUsers = gson.fromJson(JSONString, type);

但是,只要JSON中有数组,我就无法解析。我不需要,也不想解析数组,但如果有必要,解析数组然后丢弃结果就没问题。

如何使用Gson实现这一目标?或者任何其他Java JSON库。 Gson不是一个要求。

这是我要解析的JSON的一个例子:

{
   "1002001":{  
      "level":2,
      "name":"CaptKrunch",
      "uid":1002001,
      "user":{  
         "age":21,
         "city":"None",
         "country":"United States",
         "creation":1269969663
      },
      "meta":{  
         "score":1762,
         "rank":78
      }
   },
   "1003001":{  
      "level":11,
      "name":"LtRaine",
      "uid":1003001,
      "user":{  
         "age":35,
         "city":"LA",
         "country":"United States",
         "creation":1269369663
      },
      "meta":{  
         "score":11562,
         "rank":11
      }
   },
   "tags_1002001": [
     "conqurer",
     "almighty"
   ]
}

1 个答案:

答案 0 :(得分:1)

如果将JSON字符串解析为JsonElement并迭代所有元素,则可以跳过数组:

Gson gson = new Gson();

//Type type = new TypeToken<Map<String, UsersPOJO>>(){}.getType();
//Map<String, UsersPOJO> myUsers = gson.fromJson(jsonString, type);

JsonParser parser = new JsonParser();
JsonElement topElement = parser.parse(jsonString);
Map<String, UsersPOJO> myUsers = new HashMap<>();
for (Map.Entry<String, JsonElement> entry : topElement.getAsJsonObject().entrySet()) {
    if (entry.getValue().isJsonArray()) {
        //skip or process array
    } else {
        myUsers.put(entry.getKey(), gson.fromJson(entry.getValue(), UsersPOJO.class));
    }
}