【问题标题】:Map one field value to other field using Gson on condition like if first one is null or having value zero使用 Gson 将一个字段值映射到另一个字段,例如第一个字段为 null 或值为 0
【发布时间】:2026-02-02 08:50:01
【问题描述】:

我正在尝试将一个字段值映射到另一个字段值(如果该字段值为空或零)。我正在使用 Gson 库来解析 Json。有什么方法可以根据条件映射值。我尝试使用 JsonAdapter 来为该字段设置条件,但无法找到解决方案如何在其中获取其他字段值。

【问题讨论】:

    标签: parsing gson


    【解决方案1】:

    根据 json 响应编写您自己的反序列化器实现 JsonDeserializer<Element> 如下所示 -

    class CustomDeserializer implements JsonDeserializer<Element> {
    
        @Override
        public Element deserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context) throws JsonParseException {
    
            JsonObject jobject = json.getAsJsonObject();
            JsonObject object = jobject.get("key").getAsJsonObject();
    
            if(object == null){
    
            }
            return null;
    
        }
    }
    

    用法-

            GsonBuilder gsonBuilder = new GsonBuilder();
            gsonBuilder.registerTypeAdapter(Element.class, new CustomDeserializer());
            Gson gson = gsonBuilder.create();
    

    【讨论】:

    • 我创建了自定义反序列化程序,但我的要求是如果响应为空,则从响应中放入一些值。
    • 公共类 CustomOfferIdParser 实现 JsonDeserializer { private int mPassive_id=11; @Override public Integer deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) 抛出 JsonParseException { return json.getAsInt() == 1 ? mPassive_id: json.getAsInt(); } }
    • fun parseData(){ val string = "{name: \"John\", passive_id: 31, id: 1, email: \"vshpangotra@gmail.com\"}" val userModel = Gson().fromJson(string, UserModel::class.java) Log.e("userModel", userModel.toString()) } 使用方法解析数据和customDeserializer重写方法返回值。无论如何要让customDeserializer类中的passive_id进入Id。
    最近更新 更多