使用 Gson 解析 Json

使用 Gson 解析 Json

1、什么是 Json

Json 是 JavaScript Object Natation 的缩写, 是用来描述数据结构, 它是基于纯文本的数据格式 。 服务器和客户端直接的数据交互通常是用 Json 完成。

2、什么是 Gson

Gson 是 google 提供用来解析 Json 的一个开源框架 , 同类的框架 fastJson , JackJson等等。因为用 Android 提供的原生方法来完成 Json 解析过程比较繁琐 , 所以利用三方开源库来解析 Json 是一个不错的选择。

3、Json 格式

Json 存储数据的主要形式是键值对 key - value 。Json 的格式主要有以下几个需要注意的地方。

  • key 的取值为String 类型 ; 那么value的取值类型可以为:String , int , boolean , Object , null;
  • Json 数据一般是包含在大括号 { } 和中括号 [ ] 中的 , 中括号主要是用在数组类型。

如:
普通类型

    {
        " name ": "Tom",
        " age " : 13,
        " student " : ture
    }

数组类型

    [
        {
            " name ": "Tom",
            " age " : 13,
            " student " : ture
        },
        {
            " name ": "Tom2",
            " age " : 13,
            " student " : false
        }
    ]

4、Gson 的使用

  • 引入 Gson ,Gson的引入和其他第三方库的引入基本上一样,这里就不介绍了。
  • Gson 的格式化和解析。这是 Gson 的两个主要操作,分别相当于 序列化 和 反序列化。也就是说,格式化即:将 Java 对象转化为 Json 字符串; 解析即 : 将 Json 字符串 转化为 Java 对象。

Gson格式化

我们这里主要是讲 Gson 解析,所以对于Gson 格式化我们这就简单的举个例子。

  1. 创建 Java 对象。

    Man man = new Man();
    
    man.setName("zhangsan");
    
    man.setAge("12");
    
  2. 格式化

    Gson gson = new Gson();
    
    //转化为Json字符串
    
    String json = gson.toJson(man);
    

Gson 解析

Gson 解析的节点主要分为 4 个类型(这里的分类不同的开发者有不同的理解,这里笔者分为 4 种):

  • JsonPrimitive : 这里主要是一些基本的数据类型 , 如int 、String 和 Boolean 等等。
  • JsonNull : 这代表空节点 。
  • JsonObject : 这代表节点是对象类型 。
  • JsonArray : 这代表节点是数组类型。

其中 JsonPrimitive 、JsonObject 和 JsonArry 类型的节点使用的比较多。

注意:Gson 的解析大致可以分为两种。No1: Json字符串中的所有属性都解析成 Java 对象 。 No2: Json字符串中的部分属性解析成 Java 对象实际场景中后台的一个接口可能是提供给多个模块共同使用,各个模块可能只需要接口传过来 Json 字符串中的部分参数。

完全解析

  • 转化为Object

    Gson mGson = new Gson();
    Man man = mGson.fromJson(json, Man.class);//json 为 Json 字符串
    
  • 转化为List

    Gson mGson = new Gson();
    List<Man> mans = mGson.fromJson(json, new TypeToken<List<Man>>(){}.getType());
    

TypeToken 是 Gson 为我们提供了用来实现对泛型的支持的。

部分解析

现有如下的一个 Json 字符串,需要对它进行 Json 解析。

    [{"title":"既然已经分手了,所以做人就应该干脆点,你们说是吗?",
    "thumburl":"http://ww3.sinaimg.cn/large/e4e2bea6ly1feapqivtnpj20c80i9q3i.jpg",
                  "sourceurl":"http://down.laifudao.com/images/tupian/2017328192430.jpg","height":"657","width":"440","class":"1","url":"http://www.laifudao.com/tupian/68166.htm"},
    {"title":"WC时候看到的,当时感觉压力很大",
    "thumburl":"http://ww2.sinaimg.cn/large/bd698b0fjw1efacmj4w78j20dr0dy751.jpg",
    "sourceurl":"http://down.laifudao.com/images/tupian/20144100126.jpg","height":"502","width":"495","class":"1","url":"http://www.laifudao.com/tupian/31668.htm"}]

使用 HiJson工具解析的结构如下图,

解析步骤

1.定义JavaBean

    public class ImageBean {

        private String title;
        private String thumburl;
        private String sourceurl;
        private int height;
        private int width;
        private String classX;
        private String url;
    }

PS : 为了节省篇幅这里将参数的 get 和 set 方法省略了。
有时候由于后台工程师和前台工程师编码时的命名习惯不同,需要对一些参数的名字进行修改。如:后台工程师提供的 Json 字符串中的参数名为 sourceurl; 根据前台工程师的习惯想把这个参数名改为 sourceUrl (即在JavaBean 中使用sourceUrl这个变量名)。那么为了使 Gson 可以正常的解析,那么需要在 JavaBean 中添加@SerializedName 注解。修改后的 JavaBean 如下:

    public class ImageBean {

        private String title;
        private String thumburl;

        @SerializedName("sourceurl")//添加注解
        private String sourceUrl;****

        private int height;
        private int width;
        private String classX;
        private String url;
    }

2.获得 “ 解析者 ” 。

    List<ImageBean> beans = new ArrayList<ImageBean>();
    //获得解析者
    JsonParser parser = new JsonParser();

3.获得根节点以及得到跟节点的数据类型 。

    //获得根节点元素
    JsonElement jsonElement =parser.parse(res);
    //得到 根节点为数组类型的节点对象
    JsonArray jsonArray = jsonElement.getAsJsonArray();

4.取值。

    for (int i = 1; i < jsonArray.size(); i++) {
    //将数组中的第i个字符串值转化为JsonObject对象(因为第i 个元素是对象 数据类型)
    JsonObject jo = jsonArray.get(i).getAsJsonObject();
    ImageBean news =  mGson.fromJson(jo, ImageBean.class);
    beans.add(news);
    }

这是笔者对Gson的一些简单用法的理解,要是存在有误的地方望提出,谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值