java - gson中的排除策略

标签 java json gson

我的 JSON 具有以下结构:

{"name": [9000, {Inst1}, ..., {Instn}]}

其中9000是任意整数,Insti是某个类的序列化实例。 我正在使用类似的方法将所有 Inst 放入列表中:

Type listType = new TypeToken<ArrayList<Song>>(){}.getType();

并尝试通过编写如下内容来排除第一个 int:

public class ExcludeTotalFound implements ExclusionStrategy {
    private final Class<?> typeToSkip;

    public ExcludeTotalFound(Class<?> typeToSkip) {
        this.typeToSkip = typeToSkip;
    }
    public boolean shouldSkipClass(Class<?> clas_s) {
        return clas_s == typeToSkip;
    }
    public boolean shouldSkipField(FieldAttributes fieldAttributes) {
        return typeToSkip.equals(fieldAttributes.getDeclaredClass());
    }
}

最后,我正在做

gson = new GsonBuilder().addDeserializationExclusionStrategy(new ExcludeTotalFound(int.class)).serializeNulls().create();

然后:

collection = gson.fromJson(rBody, listType);

其中 rBody 是所有原始数组,即 {"name": [9000, {Inst1}, ..., {Instn}]

但我得到的只是

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

有什么问题吗?

添加: 只要我知道 JSON 的长度永远不会超过 ~500,并且结构始终保持不变,那么使用以下解决方法是否足够好?

Iterator<JsonElement> it = rBody.iterator();
it.next();
while (it.hasNext()) {
    collection.add(gson.fromJson(it.next(), Song.class));
}

最佳答案

这看起来与我在这里回答的非常相似 --> Gson custom deserialization 。这有帮助吗?这不是通过排除,而是通过自定义反序列化。

关于java - gson中的排除策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16286411/

相关文章:

java - 如何访问Lucene索引中记录的关键字?

json - 反序列化 $ref 和 $id

javascript - 与 javascript 日期相比,Json Stringify 日期产生错误的日​​期

java - 我应该如何在 Tomcat servlet 中解析 POST 请求消息的内容

java - 可以将 Gson 实例用作模型 bean 中的静态字段(重用)吗?

java - 如何从字符串中删除 '\' 字符

java - 尝试从 GWT 上的服务器调用方法时出错

java - synchronized java关键字是如何实现的?

java - 为 Jinq 创建查询时是否可以使用 Predicate<T> ?

java - GSON 整数到特定字段的 boolean 值