繁体   English   中英

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

[英]Using Gson to parse JSON with Objects but needing to exclude Arrays

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

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中存在Arrays,我就没有运气解析。 我不需要,也不想解析数组,但如果有必要,解析数组然后丢弃结果就没问题。

我如何用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"
   ]
}

如果将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));
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM