gson

作者: sofarsogoo_932d | 来源:发表于2018-06-01 10:48 被阅读0次

    gson所需依赖包github

    1.什么是gson

    gson是用来进行json和对象之间互相转化的一个工具,并且是谷歌出品

    2.gson,fastJson,org.json

    相同点
    首先这三者都是用来将json和对象互转的工具包

    不同点
    fastJson和org.json需要主动创建对象,然后解析json字符串将值塞入对象对应的成员变量上
    gson不需要手动上述操作,只需要配置好对应的实体类,一行代码就能完成json和对象之间的互转

    3.gson实例解析

    待解析的json字符串

    {
      "share_config": {
        "base_host": "https://www.baidu.com",
        "cc": {
          "facebook": {
            "prefix": "/photo",
            "short": true
          },
          "QQ": {
            "prefix": "/photo",
            "short": true
          },
          "WeiXin": {
            "prefix": "/photo",
            "short": true
          }
        }
      }
    }
    

    实体类的配置

    public class ConfigResponse {
    
        @SerializedName("share_config")
        public ShareConfig mShareConfig;
    
        public static class ShareConfig {
            @SerializedName("base_host")
            public String mBaseUrl;
    
            @SerializedName("cc")
           // public Map<String, Object> mPlatforms;
           // public String mPlatforms;  //直接蹦
            public JsonObject mPlatforms;  //要用gson下的JsonObject
        }
    
    }
    

    配置的原则是一个JsonObject就对应的一个实体类

    关于cc的配法
    前面说了一个JsonObject就对应的一个实体对象,cc中有3个JsonObject,应该对应3个实体类,但是需求是cc中可能有0个或多个,因此不能用实体类来配置
    关于如何配置这种数量不固定的,有两种方法
    1.让服务端更改json,即改成JsonArray

    //json配置
    {
      "share_config": {
        "base_host": "https://m.kwai.com",
        "cc": [
          {
            "name":"facebook",
            "prefix": "/photo",
            "short": true
          },
          {
            "name":"QQ",
            "prefix": "/photo",
            "short": true
          },
         {
           "name":"WeiXin",
            "prefix": "/photo",
            "short": true
          }
        ]
      }
    }
    
    //实体类配置
    public class ConfigResponse1 {
    
        @SerializedName("share_config")
        public ConfigResponse1.ShareConfig mShareConfig;
    
        public static class ShareConfig {
            @SerializedName("base_host")
            public String mBaseUrl;
    
            @SerializedName("cc")
            public List<SharePlatform> mPlatforms;
        }
    
        public static class SharePlatform {
            @SerializedName("name")
            public String mName;
    
            @SerializedName("prefix")
            public String mPrefix;
    
            @SerializedName("short")
            public boolean mShort;
        }
    }
    

    2.服务端不肯更改,注释已经给了很清晰的注释,当然也是可以解析成Map的,解析成JsonObject是为了更方便的解析

    一行代码将json转化成对象

    String json= AssetUtil.getJson("json/config.json",this);
    ConfigResponse configResponse=new Gson().fromJson(json,ConfigResponse.class);
    

    其中json就是前面的json字符串

    解析出facebook这个json中的值

    1.先解析出ShareConfig中的值

    ConfigResponse.ShareConfig shareConfig=configResponse.mShareConfig;
    JsonObject jsonObj=shareConfig.mPlatforms;
    Log.d("TAG",configResponse.mShareConfig.mBaseUrl);
    Log.d("TAG",jsonObj.toString());
    

    Log输出

    https://m.kwai.com
    {"facebook":{"prefix":"/photo","short":true},"QQ":{"prefix":"/photo","short":true},"WeiXin":{"prefix":"/photo","short":true}}
    

    2.解析出facebook

    JsonObject jsonObject=jsonObj.getAsJsonObject("facebook");
    String prefix=jsonObject.get("prefix").getAsString();
    boolean mShort=jsonObject.get("short").getAsBoolean();
    Log.d("TAG","prefix:"+prefix);
    Log.d("TAG","short:"+mShort);
    

    Log输出

    prefix:/photo
    short:true
    

    可以用map解析的json格式

    {
        "cc":{
            "wecaht":"微信",
            "alipay":"支付宝"
        }
    }
    

    对应的实体类配置

    @SerializedName("cc")
    public Map<String,String> mPlatforms;
    

    String转化成json

    new JsonParser().parse("jsonString").getAsJsonObject();
    

    4.后续会更新其它使用技巧

    4.1 转化的技巧

    params格式如下

    params:{
        url: 分享链接
        title:标题
        desc: 副标题
    }
    

    解析1,实体类

    @SerializedName("params")
    public Params params;
    

    解析2,map

    @SerializedName("params")
    public Map<String, String> params;
    

    解析3,json

    @SerializedName("params")
    public JsonObject params;
    

    JsonDeserializer和JsonSerializer

    相关文章

      网友评论

          本文标题:gson

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