Java 使用Gson解析带有对象但需要排除数组的JSON

Java 使用Gson解析带有对象但需要排除数组的JSON,java,json,Java,Json,我需要解析一个包含对象的JSON字符串,但JSON中也可以有数组,我不需要数组,它目前正在崩溃: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY 如果我从JSON中删除所有数组,使用以下代码用我的POJO解析JSON会非常好: Type type = new TypeToken<Map<String, Us

我需要解析一个包含对象的JSON字符串,但JSON中也可以有数组,我不需要数组,它目前正在崩溃:

com.google.gson.JsonSyntaxException: 
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY
如果我从JSON中删除所有数组,使用以下代码用我的POJO解析JSON会非常好:

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

如果将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));
    }
}
Gson-Gson=new-Gson();
//Type Type=new-TypeToken(){}.getType();
//Map myUsers=gson.fromJson(jsonString,type);
JsonParser=新的JsonParser();
JsonElement topElement=parser.parse(jsonString);
Map myUsers=newhashmap();
对于(Map.Entry:topElement.getAsJsonObject().entrySet()){
if(entry.getValue().isJsonArray()){
//跳过或处理数组
}否则{
put(entry.getKey(),gson.fromJson(entry.getValue(),UsersPOJO.class));
}
}

这里的问题是JSON数据不统一。这是应该在数据提供程序一侧修复的,而不是在解析代码中。假设您可以预处理JSON,那么您必须删除包含意外数据的顶级元素(也称为数组)@Vogel612 JSON数据的生成是我无法控制的。我的任务是为客户端应用解析它,恐怕无法在服务器端更改任何内容。如果我可以使用C语言,那么解析就没有问题了,但遗憾的是,Java是必需的。在Java中,当前可用的Json库不能做到这一点吗?这里是您想要删除或忽略的所有内容???@SachinDivakar我想忽略所有JSonarray(在上面的示例“tags_1002001”中,但是可能有数百个,如果不是数千个的话)。这正是我想要的!我正在处理与entry.getValue/getKey类似的事情,但重建了一个新的JSON字符串!:-)但这个解决方案正是我想要的!赏金将在15小时内颁发,这是最早的,让我来吧!:-)谢谢
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));
    }
}