XML和JSON都是最常见的数据交换格式,但在目前的大多数的开发者当中,使用JSON的频率要比XML的使用频率要高出很多,所以掌握编写JSON类型的文件与解析JSON文件尤为重要。

 一、认识JSON及其编写格式

JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。

        在JSON文件编写格式中,一个大括号就代表一个对象,大括号中可以描述属性以及属性相对应的值,属性与属性值存储时可以看作是键值对的存储模式。书写过程中,键与值之间是使用冒号“:”来连接的,其中键的名称必须用引号“ ”引起来,如果不加引号的话,在Java解析时容易报错,而JS能正常解析,键值对的值可以是JS中的任意类型的数据。每一个键值对之间需要使用“,”隔开。

/*正确实例*/
{
    "name":"学生",
    "age" :22,
    "info":"这人很帅"
}

         在JSON格式中也可以添加数组格式的数据,这类数组在书写过程中是直接写在中括号“[ ]”中,每一个数据利用逗号“,”隔开。例如:[元素1,元素2,元素3,.........]

数组和对象可以互相嵌套,即数组中的元素可以是对象,对象中键值对的值可以是数组。例如:

/*正确示例*/
{
    "student":"帅哥",
    "address":["江西省","吉安市",{"town":"天堂","info":"这是一个神奇的地方"}],
    "info":{"height":"高","weight":"标准"}
}

二、解析JSON 

有两种工具类可以解析JSON,一种是谷歌公司开发的Gson,另一种是阿里开发的FastJson。 两种工具类解析前都需要先引入相应的.jar文件,所调用的方法也有点不一样。

1、利用Gson来解析JSON

将对象转换成JSON字符串的步骤:

  1. 引入相应的.jar包;
  2. 创建一个Gson对象;
  3. 利用Gson对象调用toJson()方法,并将要转换的对象作为参数传入到方法中即可,结果会返回一个JSON格式的字符串;
Student student = new Student();//创建需要转换的对象
Gson gson = new Gson();//创建解析的工具类对象,如果该对象使用的次数不多,可以直接使用匿名对象
String result  = gson.toJson(student);//将要转换的对象作为参数传入调用的方法中,得到结果

将 JSON字符串转换成对象的步骤:

  1. 引入相应的.jar包;
  2. 创建一个Gson对象;
  3. 利用Gson对象调用fromJson()方法,并将要转换的JSON字符串和转换后的对象类型.class作为参数传入方法即可,结果将会返回相应类型的对象。

注意:在java编写JSON字符串时里面的双引号是要打印的,所以需要对相应的双引号使用转义字符。

String json = "{\"id\":1,\"name\":\"修仙\",\"author\":\"帅哥\",\"info\":\"哈哈哈\",\"price\":198.0}"; //编写JSON格式的字符串
Gson gson = new Gson();//创建工具类的对象
Student student = gson.fromJson(json,Student.class);//让工具类对象调用方法fromJson(),将JSON字符串转换对象

2、 利用FastJson解析JSON

将对象转换成JSON字符串的步骤:

  1. 引入相应的.jar包;
  2. 直接利用JSON.toJSONString(),并传入要转换的对象作为参数,可得到JSON类型的字符串。
Student student = new Student();//创建要转换的对象
String json = JSON.toJSONString(student);//将要转换的对象作为参数传进方法中

 将 JSON字符串转换成对象的步骤:

  1. 引入相应的.jar包;
  2. 根据要转换成的类型选择调用不同的方法,如果是转换成普通对象,则需要调用JSON.parseObject();如果是转成集合类的,则需要调用JSON.parseArray。
String json = "{\"id\":1,\"name\":\"真帅\",\"author\":\"帅哥 \",\"info\":\"哈哈哈哈哈",\"price\":198.0}"; //创建要转换的JSON格式字符串
Student student = JSON.parseObject(json,Student.class);//将JSON格式的字符串转成对象
List<Student> list = JSON.parseArray(json,Student.class);//将JSON格式的字符串转成集合