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

标签 java gson flickr android

我正在尝试找出一种方法来选择性地反序列化 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/

相关文章:

java - Spring : PropertyPlaceholderConfigurer cannot find property file

java - 如何告诉 gson 在 Java 中将哪些字段添加到 json 中?

android - 解析 json,其中字段可以有两种不同类型的 gson 或 jackson

rest - 无效的 flickr API key

javascript - 使用 Galleria jQuery 插件显示 Flickr 照片

java - Android WorkManager PeriodicWorkRequest 问题——应用关闭后不运行

java - Liferay Portlet部署

java - 如何在 servlet 中处理 UTF-8 编码的字符串

java - 使用gson解析空Json数组

Android Flickr Json 缓存图像