Json同一个参数不同类型解析几种解决办法

当遇到如下Json同一个参数不同类型解析

正常时

{
    
    
    "user": {
    
    
        "id": 11,
        "name": "label"
    }
}

无数据时

{
    
    
"user": ""
}

解决办法

1. 与后端协商,规范数据格式,保证返回字段类型不变

当你有足够的话语权说服对方修改,建议打一顿后端,让他知耻后勇

2. 完全手动解析

  try {
    
    
            JSONObject  jsonObject = new JSONObject(json);
            if (jsonObject.get("user")  instanceof String){
    
    

            }else{
    
    
                User user = (User) jsonObject.get("user");
            }

        } catch (JSONException e) {
    
    
            e.printStackTrace();
        }

将可能出现的类型都处理

3.JsonAdapter

在类前标注@JsonAdapter(UserDeserializer.class)

反序列化


public class UserDeserializerimplements JsonDeserializer<User> {
    
    


    @Override
    public Member deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
    
    

        if (json.isJsonObject()){
    
    
            try {
    
    
                Member member = new Member();
                JsonObject object = json.getAsJsonObject();
                member.setId(String.valueOf(object.get("id").getAsInt()));
                member.setRealName(object.get("name").getAsString());
        
                return member;
            }catch (Exception e){
    
    
                return  null;
            }
        }
        return null;
    }
}

正常用类解析即可

猜你喜欢

转载自blog.csdn.net/qq_35892584/article/details/124991456