json字符串與json對象之間的轉換

[TOC]javascript

1、認識 json

1. 什麼是 json?

JSON (JavaScript Object Notation, JS 對象標記) 是一種輕量級的數據交換格式,用徹底獨立於編程語言的文本格式來存儲和傳輸數據。(能夠用於代替XML)html

2. 爲何數據交換採用 json格式?

  • 簡潔和清晰的層次結構
  • 易於閱讀和編寫
  • 易於機器解析和生成
  • 能有效地提高網絡傳輸效率

3. json 對象的三種數據定義格式

語法以下:前端


注意:java

  1. 屬性與值之間用冒號 : 隔開,屬性與屬性之間用逗號 , 隔開
  2. json 串在 js 中會解析成對象。對象名稱必須用單引號或者雙引號包裹起來。value若是是字符串或者時間日期,也必須用引號引發來

4. json 對象的解析語法

  • 從數組裏取數據,使用索引 [索引]
  • 從對象裏取數據,使用 .name

萬變不離其宗,再複雜的 json 對象均可以經過兩種解析語法獲得對象中的 value 值,只不過取值次數多幾回而已git

5. json 中的幾種數據類型

  • number:和 JavaScript 的number徹底一致
  • boolean:就是 JavaScript 的truefalse
  • string:就是 JavaScript 的string
  • null:就是 JavaScript 的null
  • array:就是 JavaScript 的Array 表示方式——[]
  • object:就是 JavaScript 的{ ... }表示方式

6. json 對象與 json 字符串

json對象:若是 js 對象的數據存儲格式符合上述 json 對象的定義語法,則稱該 js 對象爲 json對象github

json字符串:json 對象的字符串表示法,簡單地說,就是將 json 對象用引號引發來,使用文本表示一個 js 對象的信息數據庫

json對象才能夠經過兩種解析語法進行取值,而轉換成json字符串後則不能夠直接取值編程

2、json轉換工具的使用

1. 何時用轉換工具?

在項目過程當中,若是出現如下場景:json

  • 查詢 MySQL 等關係型數據庫或者 Redis 緩存數據庫時,數據庫字段中存儲的是 json 字符串格式的數據
  • 須要將 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("")

瞭解更多具體案例

注意

  1. 若是非 json 格式的字符串經過轉換工具來進行轉換時,就會拋出異常
  2. 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() 使用注意:

  1. json字符外包裹一對小括號
  2. eval() 函數也能夠將字符串轉爲json對象,但不推薦,由於這種方式不安全,eval會執行json串中的表達式

3、參考連接

相關文章
相關標籤/搜索