JSON(一)——JSON簡介
阿新 • • 發佈:2018-12-31
JSON定義:JSON是輕量級的資料交換格式,全稱JavaScript 物件表示法(JavaScript Object Notation)
1、JSON語法
JSON語法規則
JSON 資料的書寫格式是:名稱/值對
"firstName" : "John"
JSON值包含:
- 數字
- 字串(雙引號)
- 邏輯值(true 和 false)
- 陣列(方括號)
- 物件(花括號)
- null
JSON物件
"data":[{"id":157,"recordSummaryId":282,"dispatchOrderId":null,"isSummary":1,"flowLineId":134,"userId":"82","userName":"李海天","auditInfo":"kkk","auditDate":"2018-10-09 17:05:09","result":2,"relateResult":1,"isRead":1,"zzId":102,"flowRoleName":"值班室","relateUserId":83,"isFinished":0}]
JSON陣列
{
"employees": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
}
2、JSON的由來
2.1序列化
序列化是把JAVA物件變成二進位制的位元組流,或者反過來成為反序列化,就是把位元組流變成JAVA物件。
序列化的作用:
- 把物件的位元組序列永久地儲存到硬碟上,通常存放在一個檔案中;
- 在網路上傳送物件的位元組序列;
你可能會疑問,JAVA物件儲存在硬碟上,不能直接儲存嗎?我們來看一個例子。
定義一個Person類,實現Serializable介面
import java.io.Serializable; 2 3 /** 4 * <p>ClassName: Person<p> 5 * <p>Description:測試物件序列化和反序列化<p> 9 */ 10 public class Person implements Serializable { 11 12 /** 13 * 序列化ID 14 */ 15 private static final long serialVersionUID = -5809782578272943999L; 16 private int age; 17 private String name; 18 private String sex; 19 20 public int getAge() { 21 return age; 22 } 23 24 public String getName() { 25 return name; 26 } 27 28 public String getSex() { 29 return sex; 30 } 31 32 public void setAge(int age) { 33 this.age = age; 34 } 35 36 public void setName(String name) { 37 this.name = name; 38 } 39 40 public void setSex(String sex) { 41 this.sex = sex; 42 } 43 }
序列化和反序列化Person類物件
1 import java.io.File;
2 import java.io.FileInputStream;
3 import java.io.FileNotFoundException;
4 import java.io.FileOutputStream;
5 import java.io.IOException;
6 import java.io.ObjectInputStream;
7 import java.io.ObjectOutputStream;
8 import java.text.MessageFormat;
9
10 /**
11 * <p>ClassName: TestObjSerializeAndDeserialize<p>
12 * <p>Description: 測試物件的序列化和反序列<p>
16 */
17 public class TestObjSerializeAndDeserialize {
18
19 public static void main(String[] args) throws Exception {
20 SerializePerson();//序列化Person物件
21 Person p = DeserializePerson();//反序列Perons物件
22 System.out.println(MessageFormat.format("name={0},age={1},sex={2}",
23 p.getName(), p.getAge(), p.getSex()));
24 }
25
26 /**
27 * MethodName: SerializePerson
28 * Description: 序列化Person物件
29 * @author xudp
30 * @throws FileNotFoundException
31 * @throws IOException
32 */
33 private static void SerializePerson() throws FileNotFoundException,
34 IOException {
35 Person person = new Person();
36 person.setName("gacl");
37 person.setAge(25);
38 person.setSex("男");
39 // ObjectOutputStream 物件輸出流,將Person物件儲存到E盤的Person.txt檔案中,完成對Person物件的序列化操作
40 ObjectOutputStream oo = new ObjectOutputStream(new FileOutputStream(
41 new File("E:/Person.txt")));
42 oo.writeObject(person);
43 System.out.println("Person物件序列化成功!");
44 oo.close();
45 }
46
55 private static Person DeserializePerson() throws Exception, IOException {
56 ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
57 new File("E:/Person.txt")));
58 Person person = (Person) ois.readObject();
59 System.out.println("Person物件反序列化成功!");
60 return person;
61 }
62
63 }
可以看到,JAVA物件需要序列化,才可以儲存為計算機上的二進位制檔案。
如果是網路傳輸呢?同樣需要把JAVA物件序列化為二進位制位元組流,對方計算機接受到後,再反序列化為JAVA物件。
目前個人使用ServiceResult 物件,序列化後,作為伺服器返回的資料。
public class ServiceResult implements Serializable {
/**
* 作為伺服器端統一返回的JSON格式
*/
private static final long serialVersionUID = 1L;
private int status;// 狀態
private String msg;// 訊息
private Object data;// 資料
}
但是,通過這種方式傳輸資料有個代價。首先雙方都必須使用JAVA,其次,序列化雙方的類必須一致。
2.2 JSON發展
為了解決上述問題,JSON派上用場。JSON語言中立,無論客戶端使用什麼語言,都支援解析。並且,相比XML資料精簡多了,傳輸效率更高。