java– 使用GSON反序列化嵌套对象

java– 使用GSON反序列化嵌套对象,第1张

概述我正在尝试反序列化以下结构{meta:{keywords:[a,b,c,d]}...}其他有效的结构是{meta:{keywords:"a,b,c,d"}...}和{meta:{keywords:"a"}...}我有这门课publicclassData{@PropertyName("meta")MetaDatameta;...}pu

我正在尝试反序列化以下结构

{ Meta: { keywords:  [a, b, c, d]}  ...  }

其他有效的结构是

{ Meta: { keywords: "a,b,c,d"}  ... }

{ Meta: {keywords: "a"}  ...}

我有这门课

public class Data {   @Propertyname("Meta")   MetaData Meta;   ...}public class  MetaData {    List<String> keywords;    ...}

和自定义反序列化器

public static class CustomDeserilizer implements JsonDeserializer<MetaData>{    @OverrIDe    public MetaData deserialize(JsonElement Json, Type typeOfT,  JsonDeserializationContext context) throws JsonParseException {        List<String> keywords = null;        Gson gson = new Gson();        MetaData MetaData = gson.fromJson(Json, AppMetaData.class);        JsonObject JsonObject = Json.getAsJsonObject();        if (JsonObject.has("keywords")) {            JsonElement elem = JsonObject.get("keywords");            if (elem != null && !elem.isJsonNull()) {                if (JsonObject.get("keywords").isJsonArray()) {                    keywords = gson.fromJson(JsonObject.get("keywords"),   new Typetoken<List<String>>() {                    }.getType());                } else {                    String keywordString = gson.fromJson(JsonObject.get("keywords"), String.class);                    keywords = new ArrayList<String>();                    List.addAll(Arrays.asList(keywordString.split(",")));                }            }        }       MetaData.setKeywords(keywords);}

然后我尝试应用deserilizer:

Gson gson = new GsonBuilder()                      .registerTypeAdapter(Data.class,new CustomDeserilizer())                       .create();

但我得到一个解析错误,因为我试图反序列化数据而不是MetaData,我如何应用这个反序列化器使其正常工作?

解决方法:

我解决了它为我的类Data创建一个反序列化器.

public static class DataDeserilizer implements JsonDeserializer {    @OverrIDe    public Data deserialize(JsonElement Json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {        Gson gson = new Gson();        Data data = gson.fromJson(Json, Data.class);        JsonObject JsonObject = Json.getAsJsonObject();        if (JsonObject.has("Meta")) {            JsonElement elem = JsonObject.get("Meta");            if (elem != null && !elem.isJsonNull()) {                Gson gsonDeserializer = new GsonBuilder()                        .registerTypeAdapter(MetaData.class, new CustomDeserilizer())                        .create();                gsonDeserializer.fromJson(JsonObject.get("Meta"), Data.class);            }        }        return data;    }}

Gson gson = new GsonBuilder()                  .registerTypeAdapter(Data.class,new DataDeserilizer())                   .create();

很明显,但有更优雅的解决方案吗?

总结

以上是内存溢出为你收集整理的java – 使用GSON反序列化嵌套对象全部内容,希望文章能够帮你解决java – 使用GSON反序列化嵌套对象所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1108565.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存