JSON
JavaScript Object Notation
表示資料的方式
Object: 鍵值對的集合,使用花括號 {}
來定義。鍵值對之間用逗號分隔。
Array: 值的有序集合,使用方括號 []
來定義。值之間用逗號分隔。
所有 JSON 資料需要包裹在一個花括號中,類似於 JavaScript 中的物件。
JSON 中的鍵
鍵需要以字串的形式定義,即在雙引號中 " "
定義(不能是單引號)。鍵和值之間用冒號分隔。
鍵必須是唯一的,否則後定義的鍵值對會覆蓋前面的鍵值對。
JSON 中的值
值可以是以下資料型別:
- 數字(整數或浮點數)
- 字串(需要在雙引號中定義)
- 布林值(true 或 false)
- 陣列(在方括號中定義)
- 物件(在花括號中定義)
- null(空)
JSON 中不可以使用八進位制或十六進位制表示數字。
JSON 中沒有日期型別,因此您只能透過日期的字串(e.g. 1970-01-01)或者時間戳(e.g. 1632366361)來表示日期
JSON 中不能定義註釋
{
"number":123,
"float":3.14,
"string":"C語言中文網",
"bool":true,
"array":[
"employees",
{"name":"peter", "age": 18},
{"name":"Anna", "age": 16}
],
"object":{
"name":"C語言中文網",
"url":"http://c.biancheng.net/"
}
}
JSON 資料型別
簡單資料型別:
- string
- number
- boolean
- null
複雜資料型別:
- Object
- Array
string
JSON 中的字串需要使用雙引號定義(注意:不能使用單引號),字串中可以包含零個或多個 Unicode 字元。另外,JSON 的字串中也可以包含一些跳脫字元,例如:
跳脫字元 | 含義 |
---|---|
|反斜線本身 | |
/ | 正斜線 |
" | 雙引號 |
\b | 退格 |
\f | 換頁 |
\n | 換行 |
\r | 回車 |
\t | 水平製表符 |
\u | 四位的十六進位制數字 |
number
JSON 中不區分整型和浮點型,只支援使用 IEEE-754 雙精度浮點格式來定義數字。此外,JSON 中不能使用八進位制和十六進位制表示數字,但可以使用 e 或 E 來表示 10 的指數。
Object
物件是一個無序的鍵值對的集合。物件由花括號 { }
以及其中的若干鍵值對組成,一個物件中可以包含零個或多個鍵值對,每個鍵值對之間用逗號分隔。
整個 JSON 就是一個物件型別。
物件中的最後一個鍵值對的末尾不需要新增逗號。
Array
陣列是值的有序集合。陣列由方括號 [ ]
和其中的若干值組成,值可以是 JSON 中支援的任意型別,每個值之間用逗號分隔。
陣列中的最後一個值的末尾也不需要新增逗號。
{
"course" : [
"JSON 教程",
"JavaScript 教程",
"HTML 教程",
{
"website" : "C語言中文網",
"url" : "http://c.biancheng.net"
},
[
3.14,
true
],
null
]
}
JSON 註釋
JSON 不允許新增註釋。為了使用註釋,我們可以使用以下幾種方法:
使用特殊的鍵名
給要註釋的鍵值對新增一個同名的鍵,並在鍵名中新增一個特殊字元加以區分,如 @
,#
,?
,_
,/
等,然後在值中定義註釋的內容。
💡Tip: 在鍵名中新增特殊字元時,應儘量避免
:
,{
,}
,[
,]
等 JSON 中常用的字元。
{
"@name": "網站名稱",
"name": "C語言中文網",
"_url": "網址",
"url": "http://c.biancheng.net/",
"course": "JSON 教程",
"@charge": "0=收費; 1=免費",
"charge": 1,
"#list": "教程目錄",
"list": [
"JSON資料型別",
"JSON物件",
"JSON陣列"
],
"message": {
"code": 0,
"message": "OK",
"#data": {
"#id": "使用者ID",
"#type": "0=正常; 1=異常",
"#name": "姓名",
"#createTime": "建立時間(yyyy-MM-dd)"
},
"data": {
"id": "12345",
"type": 0,
"name": "我的名字",
"createTime": "2020-05-20"
}
}
}
也可以直接以 “comment”,“_comment” 或 “__comment” 作為鍵名來定義註釋:
{
"_comment": "C語言中文網(http://c.biancheng.net/)—— 一個線上學習程式設計的網站",
"course": {
"name": "JSON 教程",
"url": "http://c.biancheng.net/json/index.html"
}
}
之所以不允許新增註釋,是因為 JSON 主要是用來儲存資料的,過多的註釋會對資料的可讀性造成影響,同時也會造成資料體積變大,進而影響資料傳輸、解析的速度。
JSON5
JSON5 是由開發人員建立並在 GitHub 上釋出的 JSON 的非官方標準,可以將它看作是 JSON 的升級版。JSON5 主要是透過引入部分 ECMAScript5.1 的特性來擴充套件 JSON 語法,減少 JSON 的某些限制,同時相容現有的 JSON 格式。
與 JSON 相比,JSON5 做出瞭如下改變:
- 在物件或陣列的末尾(即最後一個鍵值對或值)可以新增逗號
- 字串可以使用單引號定義
- 字串中可以包含跳脫字元,並且可以跨越多行
- 可以定義十六進位制的數字
- 數字可以包含前導或後導的小數點
- 數字前可以新增一個加、減號來表示正負數
- 可以使用
//
來定義單行註釋,使用/* ... */
來定義多行註釋
使用 JSON5
JSON Schema
JSON Schema 可以用來限定要在 JSON 中出現的欄位、欄位含義、欄位型別等資訊。詳見 JSON Schema(模式)
從 JSON Schema 官網查詢合適的 JSON Schema 庫,或者透過線上工具來使用 Schema。
JSON 對比工具
JSON 對比工具
使用 VS Code 進行對比:選中要對比的檔案,在右鍵選單中選擇 “Select for Compare”,然後選中第二個要對比的檔案,在右鍵選單中選擇 “Compare with Selected”。
JSON 在程式語言中的解析和建立
Python
Java
Ajax