gpt4 book ai didi

Java Gson 从对象内的列表中反序列化选定字段

转载 作者:太空宇宙 更新时间:2023-11-04 11:28:01 25 4
gpt4 key购买 nike

我正在尝试找出一种方法来选择性地反序列化 flickr 中的特定字段。

{"photos":{"page":1,"pages":10,"perpage":100,"total":1000,"photo":[{"id":"","owner":"","secret":"","server":"","farm":,"title":"","ispublic":,"isfriend":,"isfamily":0,"url_s":"","height_s":"","width_s":""},...]}

我收到一个包含两个列表(照片和照片)的对象,我想在 Java 中仅对照片中的 id、url_s 和标题进行建模。

我发现我可以使用 @expose 注释为我感兴趣的字段创建我的 java 模块,而不是使用 builder.excludeFieldsWithoutExposeAnnotation();这样我就可以控制从照片中反序列化哪些字段(仍然不确定它是否能以这种方式工作),但是照片呢?

我的问题是:

  1. 有办法忽略该列表吗?我是否必须对包含两个列表(及其各自的字段)的 Java 类进行建模才能从第二个列表中获取我需要的内容?

  2. 扩展前一个问题,如果我的照片模块类是:

    public class GalleryItem {
    @Expose()
    private String mCaption;
    @Expose()
    private String mId;
    @Expose()
    private String mUrl;
    }

    我可以只在我需要的部分调用gson吗?

    Type galleryListType = new TypeToken<ArrayList<GalleryItems>> (){}.getType();

    List<GalleryItems> itemsList = gson.fromJson(jsonString, galleryListType);
  3. 我可以使用 setExclusionStrategies 跳过照片列表吗?

    gsonBuilder.setExclusionStrategies(new ExclusionStrategy() {  
    @Override
    public boolean shouldSkipField(FieldAttributes f) {
    **return f.getName().contains("photos")**;
    }

    @Override
    public boolean shouldSkipClass(Class<?> incomingClass) {
    return ;
    }
    });

我已经使用原始 JSONObject/JSONArray 实现了一个解决方案,但我很好奇使用 GSON 来完成手头的任务。

提前致谢!

最佳答案

Gson 提供 Java 字段的反序列化。如果您标记为transient你的变量,Gson 不会序列化为 JSON。 Gson 还通过注释提供更精细的反序列化控制:@Expose(deserialize = false/true)最后一个选项是编写您的自定义 JsonDeserializer<T>

关于Java Gson 从对象内的列表中反序列化选定字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44134860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com