更加全面的認識json
json
大家好,我是小劉!好久沒寫技術文章了,最近都是在好好生活,好好的學習,分享我知道的一些json 相關的,我自己在總結歸納,讓我們深入理解json,不僅是知道是什么,怎么用,還可以知道他的背景、用法、原理 ?要知道:
知其然而不知其所以然
作為Java后端開發(fā)者json再熟悉不過了
但是你真的知道json嘛?
什么是json
百度百科:

簡稱:JSON是JavaScript Object Notation的簡稱,中文含義為“JavaScript 對象表示法”,它是一種數據交換的文本格式,而不是一種編程語言。
JSON 是一種輕量級的數據交換格式,它基于 ECMAScript (w3c制定的js規(guī)范)的一個子集,采用完全獨立于編程語言的文本格式來存儲和表示數據。簡潔和清晰的層次結構使得 JSON 成為理想的數據交換語言。
JSON的特點
JSON 主要具有以下特性,這些特性使它成為理想的數據交換語言:
JSON 是輕量級的文本數據交換格式
JSON 具有自我描述性,更易理解
JSON 采用完全獨立于語言的文本格式:JSON 使用 JavaScript 語法來描述數據對象,但是 JSON 仍然獨立于語言和平臺。JSON 解析器和 JSON 庫支持許多不同的編程語言。目前常見的動態(tài)編程語言(PHP,JSP,.NET)都支持JSON。
JSON 是存儲和交換文本信息的一種語法,它與XML具有相同的特性,是一種數據存儲格式,卻比 XML 更小、更快、 更易于人編寫和閱讀、更易于生成和解析。
類似于 XML 的特性:
JSON 是純文本
JSON 具有“自我描述性”(人類可讀)
JSON 具有層級結構(值中存在值)
JSON 可通過 JavaScript 進行解析
JSON 數據可使用 AJAX 進行傳輸
相比 XML 的不同之處:
沒有結束標簽
更短
讀寫的速度更快
能夠使用內建的 JavaScript eval() 方法進行解析
使用數組
不使用保留字
JSON語法
在 JavaScript 語言中,一切皆對象。任何支持的類型,如字符串、數值、對象、數組等,都可以通過 JSON 來表示。
JSON 語法是 JavaScript 對象表示法的子集:
數據在鍵/值對中,鍵/值對可以嵌套
數據由逗號分隔
花括號保存對象,對象可以包含多個鍵/值對
方括號保存數組,數組可以包含多個對象
JSON不是JavaScript語句,對象的末尾沒有分號,對象和數組的最后一個成員后面,也不能加逗號。
JSON的類型
1.1 JSON 鍵/值對
JSON鍵/值對由鍵和值組成,鍵必須是字符串,值可以是字符串(string)、數值(number) 、對象(object)、數組(array)、true、false、 null。如圖所示:

在定義JSON鍵/值時,先是鍵名,后面寫一個冒號,然后是值。如:"github": "https://github.com/leiqikui"
這就等價于這條 JavaScript 語句:
github = "https://github.com/leiqikui"
1.2 JSON 字符串
JSON 的字符串(string)跟C或者Java的字符串非常相似,是由雙引號包圍的任意數量Unicode字符的集合,使用反斜線轉義。如圖所示:
由于JSON 字符串不能使用單引號,因此一個字符(character)就是一個單獨的字符串(character string)。
1.3 JSON 數值
JSON 數值(number)與C或者Java的數值非常相似,支持整型、浮點型,浮點型也可以用指數表示。如圖所示:
JSON不支持八進制和十六進制, 數值必須以十進制表示,且不能使用NaN和Infinity。以下是合法的JSON數值:
{ "age": 30 }
1.4 JSON 對象
JSON 對象是一個無序的key/value對的集合。一個對象以 '{' 開始,以 '}' 結束;每個key 和 value 中使用冒號分隔;每個 key/value 對之間使用逗號分隔。如圖所示:
JSON 對象語法:
對象在大括號({})中書寫。
對象可以包含多個 key/value(鍵/值)對。
key是字符串,必須放在雙引號里面。value 可以是合法的 JSON 數據類型(字符串, 數值, 對象, 數組, 布爾值或 null)。
一個 key/value 對內部,key 和 value使用冒號(:)分隔。
key/value 對之間,使用逗號(,)分隔。
對象可以嵌套
下面就是一個合法的JSON 對象:
1.5 JSON 數組
數組是值(value)的有序集合。一個數組以“[”(左中括號)開始,“]”(右中括號)結束。值之間使用“,”(逗號)分隔。如圖所示:

JSON 數組:
數組在中括號中書寫。
數組的值必須是合法的 JSON 數據類型(字符串, 數值, 對象, 數組, 布爾值或 null),也可以是 JavaScript 的表達式,包括函數、日期、undefined。
對象的屬性值也可以是一個JSON數組。如,以下對象的 sites 屬性值是一個包含三個元素的數組:
JSON數組的元素也可以是對象。如,以下對象 "employees" 是包含三個對象的數組,每個對象代表一條關于某人(有姓和名)的記錄:
1.6 JSON 布爾值
JSON 布爾值可以是 true 或者 false。如:
{ "flag":true }
1.7 JSON null
JSON 可以設置 null 值。如:
{ "zhihu":null }
1.8 JSON 文件
JSON 文件的文件類型是 ".json"
JSON 文本的 MIME 類型是 "application/json"
Java解析(讀取)json數據{} [{}]
1.JSON介紹
JSON比XML簡單,主要體現在傳輸相同信息的情況下,文件的大小不同。JSON只用于傳輸信息,XML還可以用于配置文件的使用。簡單來說
JSON就是一種數據的組織形式,可以說是XML的簡化版本,只用于數據傳輸。
2.JSON中的數組和對象
2.1數組(JSONArray)
數組用一對[],表示存放的是一般的數組數據。
如:["11","22","33"],表示這是一個JSONArray數組,里面有3個數據:11,22,33。當然可以是復雜的數據,就是所謂的嵌套定義吧。
2.對象(JSONObject)
對象用一對{},來表示其中JSON通用的鍵-值對。
如:{"sex1":"female","name0":"zhangsan"},表示的是一個JSON對象,里面有兩組數據(鍵值對),sex1=female,name0=zhangsan。當然這里鍵對應的數據值,可以是復雜的JSON對象或者數組。
案例demo如下:
基本的JSONArray與JSONObject操作
由java自帶的數據結構轉換為JSON文本
讀取JSON文本
JSONArray必須用下標讀取內部數據。
JSONObject必須用”鍵“讀取對應的”值“。
JSONArray和JSONOject的用法
JSONArray用法
1??解析字符串
?
??
2??存值取值
?(1)?存值
???
????(2)?取值
?
?
3???格式:?
?本質是數組,?必須是數組格式,???用??[?]?包裹數據?
?格式:???[{key:value},{key:value}... ]
?????????["str1","str2","str3",...]
JSONObject的用法
1?解析字符串
2??存值取值
???(1)?存值
???(2)?取值
????
3??格式:
?本質是對象,?用?{}?表示
?格式:??{key:value}
?
案例demo如下:
???????
只要格式正確,?空字符串和null都是可以解析
答案:??打印第6條因格式不對,?會報錯,?所以注釋了
???????
最后
總結:
JSON是JavaScript Object Notation的簡稱,中文含義為“JavaScript 對象表示法”,它是一種數據交換的文本格式,而不是一種編程語言。
2.json 的特點:
1.JSON 是輕量級的文本數據交換格式
2.JSON 具有自我描述性,更易理解
3.JSON 采用完全獨立于語言的文本格式、JSON 解析器和 JSON 庫支持許多不同的編程語言。
4.比 XML 更小、更快、 更易于人編寫和閱讀、更易于生成和解析。
5.JSON 是純文本、易讀、層級結構鮮明、JSON 可通過 JavaScript 進行解析、JSON 數據可使用 AJAX 進行傳輸
3.常用的json:比如json字符串、json對象、json數組
4.json的解析:
{} 用JSONObject
[] 用JSONArray

最后,歡迎學編程的朋友們加入我的 《java學習群》,我會 1 對 1 解決你的問題(盡我所能),群里的人也會對解答疑惑。

掃碼拉群,學習打卡,交流經驗