????????可能有很多人,無論是前端還是后端,無論是JAVA還是Python還是C,都應該跟JSON這種數據格式打過交道,那么有沒有仔細的想過,什么叫JSON?
????????JSON是一種輕量級的數據交換格式。它基于JavaScript語言的對象表示法,但獨立于其語言,幾乎所有的編程語言都可以解析和生成JSON數據。JSON的設計初衷是為了易于人們閱讀和編寫,同時也易于機器解析和生成。
一、JSON的基本結構
它是由兩種結構組成的:對象(object)和數組(array)。
在Java中的JSON處理庫中,通常用 JSONObject
和 JSONArray
類來表示這兩種結構。?
1.1?JSONObject
JSONObject代表一個JSON中的鍵值對象,這個對象以大括號包圍,每個鍵值對使用,
隔開,鍵與值使用:
隔開,一個JSONObject類似于這樣:
- 對象是一個無序的“鍵/值對”集合。
- 用花括號
{ }
包裹。 - 鍵必須是字符串,值可以是字符串、數字、布爾值、數組、對象或null。
{"name": "John","age": 30,"isStudent": false,"address": {"street": "123 Main St","city": "New York"}
}
1.2?JSONArray
在JSON中,JSONArray代表一個數組,使用中括號包圍,每個元素使用逗號隔開。一個JSONArray類似于這樣:
- 數組是一個有序的值集合。
- 用方括號
[]
包裹。 - 數組中的值可以是任何類型,包括對象和其他數組。
["Apple","Banana","Cherry"
]
1.3 JSON 的數據類型
JSON支持以下幾種數據類型:
- 字符串(String):必須用雙引號包圍。例如 "Hello World"
- 數字(Number):可以是整數或浮點數。例如 42 或 3.14
- 布爾值(Boolean):表示真或假,取值為 true 或 false
- 數組(Array):一組有序的值。例如 ["apple", "banana", "cherry"]
- 對象(Object):一組鍵值對。例如 {"name": "John", "age": 30}
- null:表示空值。例如 null
1.4
?相互關系:
- JSONObject 和 JSONArray 是JSON數據結構的具體表示。
- JSONObject 可以包含多個 JSONArray 作為其值,反之亦然,JSONArray 也可以包含多個 JSONObject 作為其元素。
- 它們可以互相嵌套,從而形成復雜的JSON結構。
{"name": "Alice","age": 25,"isStudent": true,"grades": [90, 88, 92],"address": {"street": "456 Elm St","city": "Los Angeles","state": "CA"},"courses": [{"name": "Math", "credits": 3},{"name": "Science", "credits": 4}]
}
我們看到 JSONObject
包含了多個鍵值對,其中一個值是 JSONArray
,而 JSONArray
中的一個元素又是另一個 JSONObject
。這展示了 JSONObject
和 JSONArray
如何通過嵌套來表達復雜的數據結構。
二、JSON的轉換
在Java開發中,JSON、Bean、Map、List之間的相互轉換非常常見,通常使用第三方庫如來簡化這些操作,這里我使用Hutool工具包來進行實例。
第一步:引入Hutool
在POM中引入Hutool:
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.17</version>
</dependency>
2.1 Bean,List,Map轉化為JSON
首先看實體類User
然后看我們的工具類:
JSONUtil.toJsonStr 方法
可以將任意對象(Bean、Map、集合等)直接轉換為JSON字符串。 如果對象是有序的Map等對象,則轉換后的JSON字符串也是有序的。
?
結果為:
2.2 JSON轉Bean
從SQL中可以查找的一般都直接轉化為對象,但是Redis中經常存儲的都是JSON格式,所以要進行轉換,這里模擬的JSON數據
2.3 JSON轉List
2.4?獲取json中某個字段
2.5 JSON轉化為數組
?