Android 数据传递之JSON --GSON

126 阅读2分钟
  1. JSON 的全称是 JavaScript Object Notation ,也就是 JavaScript 对象表示法
  2. JSON 是存储和交换文本信息的语法,类似 XML ,但是比 XML 更小、更快,更易解析
  3. JSON 是轻量级的文本数据交换格式,独立于语言,具有可描述性,更易理解,对象可以包含多个名称 / 值对,比如:
{"name":"zhangsan" , "age":25}

json简单说就是对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构

1 对象:对象表示为 “{}” 扩起来的内容,数据结构为 {key : value,key : value,...} 的键值对的结构,在面 向对象的语言中,key 为对象的属性, value 为对应的属性值,所以很容易理解,取值方法为 对象 .key 获 取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。

2 数组:数组在 json 中是中括号 “[]” 扩起来的内容,数据结构为 ["java","javascript","vb",...] ,取值方式和 所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。 经过对象、数组 2 种结构就可以组合成复杂的数据结构了。

  • SDK 提供
 JSONArrayJSONObject
  • google 提供的 Gson
  1.    通过fromJson() 实现对象的反序列化(即将 json 串转换为对象类型)
    
  2.    通过toJson() 实现对象的序列化 (即将对象类型转换为json 串)
    
  • 使用谷歌的GSON包进行解析,在 Android Studio 里引入依赖:
compile  'com.google.code.gson:gson:2.7'

值得注意的是实体类中变量名称必须和json中的值名字相同。 使用示例:

  • 解析成实体类:
Gson gson = new Gson();
Student student = gson.fromJson(json1, Student.class);
  • 解析成 int 数组: Gson gson = new Gson(); int[] ages = gson.fromJson(json2, int[].class);
  • 直接解析成 List.
Gson gson = new Gson();
List<Integer> ages = gson.fromJson(json2, newTypeToken<List<Integer>>(){}.getType);
Gson gson = new Gson();
List<Student> students = gson.fromJson(json3, newTypeToke<List<Student>>(){}.getType);

优点: 轻量级的数据交换格式 读写更加容易 易于机器的解析和生成

缺点: 语义性较差,不如 xml 直观