JSON 語法詳細介紹
一、JSON 簡介
JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,具有以下特點:
- 易於人閲讀和編寫
- 易於機器解析和生成
- 完全獨立於語言的文本格式
二、基本數據結構
1. 對象(Object)
- 用花括號
{}包裹 - 包含無序的鍵值對集合
- 鍵必須是字符串(用雙引號包裹)
- 鍵和值用冒號
:分隔 - 鍵值對之間用逗號
,分隔
{
"name": "張三",
"age": 25,
"isStudent": true
}
2. 數組(Array)
- 用方括號
[]包裹 - 值的有序集合
- 值之間用逗號
,分隔
["蘋果", "香蕉", "橙子"]
三、數據類型
1. 字符串(String)
- 必須使用雙引號
"" - 支持轉義字符
"Hello World"
"姓名:\"張三\""
2. 數字(Number)
- 整數或浮點數
- 支持科學計數法
42
3.14
-10
1.2e3
3. 布爾值(Boolean)
true
false
4. 空值(Null)
null
5. 對象和數組(如上所述)
四、語法規則詳解
1. 鍵名規則
- 必須是字符串
- 必須用雙引號括起來
- 鍵名在對象中必須唯一
{
"first-name": "李", // 合法
"firstName": "李", // 合法
firstName: "李" // 不合法(缺少雙引號)
}
2. 值的要求
- 可以是任何 JSON 支持的數據類型
- 可以嵌套對象或數組
3. 空白字符
- 空格、製表符、換行符等空白字符可增加可讀性
- 解析時會被忽略
{
"name": "張三",
"hobbies": ["閲讀", "運動"]
}
五、嵌套示例
複雜對象示例:
{
"person": {
"name": "王五",
"age": 30,
"address": {
"city": "北京",
"street": "長安街"
},
"phones": [
{
"type": "home",
"number": "010-12345678"
},
{
"type": "mobile",
"number": "13800138000"
}
]
},
"company": "ABC公司"
}
六、JSON 文件
- 文件擴展名:
.json - MIME 類型:
application/json - 編碼:通常使用 UTF-8
七、JSON 與 XML 比較
| 特性 | JSON | XML |
|---|---|---|
| 可讀性 | 較好 | 較好 |
| 數據量 | 較小 | 較大 |
| 解析速度 | 較快 | 較慢 |
| 數據結構 | 鍵值對 | 標籤樹 |
八、有效與無效示例
有效的 JSON:
{
"數字": 123,
"字符串": "值",
"布爾值": true,
"空值": null,
"數組": [1, 2, 3],
"對象": {"key": "value"}
}
無效的 JSON:
{
name: "張三", // 錯誤:鍵名未加雙引號
'age': 25, // 錯誤:使用單引號
"hobbies": [游泳, 閲讀], // 錯誤:字符串未加引號
"isStudent": TRUE // 錯誤:布爾值應為小寫
}
九、實際應用中的注意事項
-
日期格式:JSON 沒有日期類型,通常用字符串表示
"2024-01-15T10:30:00Z" -
特殊字符轉義:
{ "路徑": "C:\\Windows\\System32", "引號": "他説:\"你好\"" } -
註釋:JSON 標準不支持註釋,但某些解析器支持
{ // 這是註釋(非標準) "name": "張三" }
十、JSON 在編程中的使用
JavaScript 示例:
// 解析 JSON 字符串
const obj = JSON.parse('{"name":"張三"}');
// 生成 JSON 字符串
const jsonStr = JSON.stringify({name: "張三"});
Python 示例:
import json
# 解析 JSON
data = json.loads('{"name": "張三"}')
# 生成 JSON
json_str = json.dumps({"name": "張三"})
總結
JSON 語法簡潔明瞭,主要記住幾個關鍵點:
- 所有鍵名必須用雙引號
- 字符串值必須用雙引號
- 值可以是6種數據類型之一
- 支持嵌套和複雜數據結構
- 嚴格遵循語法規則,確保數據可交換性
結束語 Flutter是一個由Google開發的開源UI工具包,它可以讓您在不同平台上創建高質量、美觀的應用程序,而無需編寫大量平台特定的代碼。我將學習和深入研究Flutter的方方面面。從基礎知識到高級技巧,從UI設計到性能優化,歡飲關注一起討論學習,共同進入Flutter的精彩世界!