美文网首页
Gson 使用笔记

Gson 使用笔记

作者: 王增辉 | 来源:发表于2016-05-13 11:00 被阅读612次

特殊场景

0 OR 1 && True OR False 转换

有时候api接口返回的数据中经常用0&1代替False&True 返回给客户端,例如下面这样的数据结构:

{
  "data": {
    "has_next": 0,
    "products": [
      {
        
      }
    ]
  },
  "result": 1
}

has_next 表示是否有下一页,我们在客户端里面用False&True 更为简单的做判断,但这里返回了0&1 该怎么对应解析呢? 翻看Gson提供的注解解析的方式发现里面有这样一个注解JsonAdapter 。作用是允许用户序列化反序列化为自己想要的数据类型,这里我们需要将0&1 变成False&True 因此有了一下实现:

public class BooleanJsonAdapter extends TypeAdapter<Boolean> {
    @Override
    public void write(JsonWriter out, Boolean value) throws IOException {
        out.value(value ? 1 : 0);
    }
    @Override    public Boolean read(JsonReader in) throws IOException {
        if (in.peek() == JsonToken.NULL) {
            in.nextNull();
            return false;
        }
        try {
            int x = in.nextInt();
            return x != 0;
        } catch (Exception e) {
            throw new JsonSyntaxException(e);
        }
    }
}

Model里一个属性对应多个json 字段

有时候服务器也会不知道怎么想的,两个接口返回同样的数据结构但是其中一个属性的名字是不同的该怎么做呢?像下面这种形式:recommend_imagesimages 实际上是同样的内容,可能脑袋抽风两个接口用了不同的名称

{
  "data": {
    "has_next": 0,
    "products": [
      {
        "recommend_images":[]
      }
    ]
  },
  "result": 1
}
{
  "data": {
    "has_next": 0,
    "products": [
      {
        "images":[]
      }
    ]
  },
  "result": 1
}

Gson 提供了一个下面这种形式便可以将两个不同的字段解析为同一个属性:

@SerializedName(value = "recommend_images", alternate = {"images”})
private List<String> images;

感情遇到问题?欢迎关注我的微信公众号,帮你解答:

宅男总动员

相关文章

网友评论

      本文标题:Gson 使用笔记

      本文链接:https://www.haomeiwen.com/subject/tonprttx.html