天天看點

json字元串與json對象之間的轉換一、認識 json二、json轉換工具的使用三、參考連結

目錄

  • 一、認識 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字元串與json對象之間的轉換一、認識 json二、json轉換工具的使用三、參考連結
注意:
  1. 屬性與值之間用冒号 : 隔開,屬性與屬性之間用逗号 , 隔開
  2. 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

    等關系型資料庫或者

    Redis

    緩存資料庫時,資料庫字段中存儲的是 json 字元串格式的資料
  • 需要将 javabean 序列化為字元串儲存到資料庫表的字段中

是以,将 json 字元串轉換為 java 對象或者将 java 對象轉換為 json 字元串是非常有必要的。

2. json串與json對象的轉換(後端)

2.1 常見的 json 轉換工具

json的轉換工具是通過java編寫并封裝好的一些jar工具包,實作java對象或集合與json格式字元串的互換。

json字元串與json對象之間的轉換一、認識 json二、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串中的表達式

三、參考連結

  • Quick Start CN · alibaba/fastjson Wiki · GitHub
  • JSON - 廖雪峰的官方網站
  • Fastjson API中文版_w3cschool
  • Notepad++中安裝json格式化插件

轉載于:https://www.cnblogs.com/zhiyin1209/p/11273678.html

繼續閱讀