目錄
- 一、認識 json
- 1. 什麼是 json?
- 2. 為什麼資料交換采用 json格式?
- 3. json 對象的三種資料定義格式
- 4. json 對象的解析文法
- 5. json 中的幾種資料類型
- 6. json 對象與 json 字元串
- 二、json轉換工具的使用
- 1. 什麼時候用轉換工具?
- 2. json串與json對象的轉換(後端)
- 2.1 常見的 json 轉換工具
- 2.2 fastjson工具的使用
- 3. json串與json對象的轉換(前端)
- 3.1 序列化
- 3.2 反序列化
- 三、參考連結
一、認識 json
1. 什麼是 json?
JSON (JavaScript Object Notation, JS 對象标記) 是一種輕量級的資料交換格式,用完全獨立于程式設計語言的文本格式來存儲和傳輸資料。(可以用于代替XML)
2. 為什麼資料交換采用 json格式?
- 簡潔和清晰的層次結構
- 易于閱讀和編寫
- 易于機器解析和生成
- 能有效地提升網絡傳輸效率
3. json 對象的三種資料定義格式
文法如下:
注意:
- 屬性與值之間用冒号 : 隔開,屬性與屬性之間用逗号 , 隔開
- json 串在 js 中會解析成對象。對象名稱必須用單引号或者雙引号包裹起來。value如果是字元串或者時間日期,也必須用引号引起來
4. json 對象的解析文法
- 從數組裡取資料,使用索引
[索引]
- 從對象裡取資料,使用
.name
萬變不離其宗,再複雜的 json 對象都可以通過兩種解析文法得到對象中的 value 值,隻不過取值次數多幾次而已
5. json 中的幾種資料類型
- number:和 JavaScript 的
完全一緻number
- boolean:就是 JavaScript 的
或true
false
- string:就是 JavaScript 的
string
- null:就是 JavaScript 的
null
- array:就是 JavaScript 的
表示方式——Array
[]
- object:就是 JavaScript 的
表示方式{ ... }
6. json 對象與 json 字元串
json對象:如果 js 對象的資料存儲格式符合上述 json 對象的定義文法,則稱該 js 對象為 json對象
json字元串:json 對象的字元串表示法,簡單地說,就是将 json 對象用引号引起來,使用文本表示一個 js 對象的資訊
json對象才可以通過兩種解析文法進行取值,而轉換成json字元串後則不可以直接取值
二、json轉換工具的使用
1. 什麼時候用轉換工具?
在項目過程中,如果出現以下場景:
- 查詢
等關系型資料庫或者MySQL
緩存資料庫時,資料庫字段中存儲的是 json 字元串格式的資料Redis
- 需要将 javabean 序列化為字元串儲存到資料庫表的字段中
是以,将 json 字元串轉換為 java 對象或者将 java 對象轉換為 json 字元串是非常有必要的。
2. json串與json對象的轉換(後端)
2.1 常見的 json 轉換工具
json的轉換工具是通過java編寫并封裝好的一些jar工具包,實作java對象或集合與json格式字元串的互換。
2.2 fastjson工具的使用
fastjson 是阿裡巴巴的開源 JSON 解析庫,它可以解析 JSON 格式的字元串,支援将 Java Bean 序列化為 JSON 字元串,也可以從 JSON 字元串反序列化到 JavaBean。
maven項目中導入jar包依賴
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.28</version>
</dependency>
2.2.1 序列化(java對象轉字元串)
/**
* @param object 任意java對象
* @return json字元串
*/
public static String toJSONString(Object object) {}
調用方法:
JSON.toJSONString(obj)
2.2.2 反序列化(字元串轉java對象)
/**
* 字元串轉清單List
* @param text json字元串
* @param clazz 指定轉換的包裝類型
* @param <T> List泛型,即指定的包裝類型
* @return
*/
public static <T> List<T> parseArray(String text, Class<T> clazz) {}
/**
* 字元串轉map
* @param text json字元串
* @param clazz 轉換成的存儲類型:Map.class
* @param <T> 存儲類型
* @return
*/
//以下兩種方式都可以将json串轉換成對應的map集合
public static <T> T parseObject(String text, Class<T> clazz) {}
public static JSONObject parseObject(String text) {}
調用:
JSON.parseArray("", Animal.class)
,
JSON.parseObject("", Map.class)
,
JSON.parseObject("")
了解更多:具體案例
注意
- 如果非 json 格式的字元串通過轉換工具來進行轉換時,就會抛出異常
- JSONObject是Map接口的實作類,是以當傳回值為JSONObject時,可以直接用Map對象進行接收
3. json串與json對象的轉換(前端)
JavaScript 内置了 JSON 的解析,支援任何 JavaScript 對象序列化成一個JSON格式的字元串,一個JSON格式的字元串反序列化成一個 JavaScript 對象(json 對象可以直接在 javascript 中使用,通過解析文法取值)
3.1 序列化
-
JSON.stringify(obj)
3.2 反序列化
-
JSON.parse(string)
-
eval('(' + jsonStr + ')')
eval() 使用注意:
- json字元外包裹一對小括号
- eval() 函數也可以将字元串轉為json對象,但不推薦,因為這種方式不安全,eval會執行json串中的表達式
三、參考連結
- Quick Start CN · alibaba/fastjson Wiki · GitHub
- JSON - 廖雪峰的官方網站
- Fastjson API中文版_w3cschool
- Notepad++中安裝json格式化插件
轉載于:https://www.cnblogs.com/zhiyin1209/p/11273678.html