JSON及Python操作JSON相關
Json簡介及Python操作Json相關示例。
1. JSON概念及支援的資料型別
1.1 什麼是 JSON?
JSON(JavaScript Object Notation)是一種輕量級的資料交換格式,易於人閱讀和編寫,同時也易於機器解析和生成。儘管 JSON 源於 JavaScript,它與程式語言無關,目前被廣泛應用於各種程式語言中。
1.2 JSON 支援的資料型別
JSON 支援以下幾種基本資料型別:
- 兩種特殊型別:陣列(array)、物件(object)
- 四種基礎型別:字串(string)、數字(number)、布林型(boolean)、NULL值
- 物件(Object)
- 表示為一組無序的鍵值對集合,用花括號
{}
包裹。 - 鍵必須是字串,並且用雙引號包裹。
- 每個鍵值對之間用逗號
,
分隔。 - 鍵和值之間用冒號
:
分隔。
示例:
{
"name": "John",
"age": 30,
"isStudent": false,
"address": {
"city": "New York",
"zip": "10001"
}
}
- 陣列(Array)
- 表示為一個有序的值集合,用方括號
[]
包裹。 - 各個值之間用逗號
,
分隔。
示例:
[
"apple",
"banana",
"cherry"
]
json物件和字串區別:
特性 | JSON 物件 | JSON 陣列 |
---|---|---|
表示 | 花括號 {} 包裹 |
方括號 [] 包裹 |
資料形式 | 無序的鍵值對集合 | 有序的值的集合 |
鍵 | 字串(用雙引號包裹) | 無鍵,只有索引 |
值 | 可以是任何JSON資料型別 | 可以是任何JSON資料型別 |
使用場景 | 表示複雜結構化資料 | 表示有序列表資料 |
- 字串(String)
- 表示為一串字元序列,用雙引號
"
包裹。 - 可以包含跳脫字元,例如
\"
表示雙引號,\\
表示反斜槓,\n
表示換行符等。
示例:
"Hello, world!"
- 數字(Number)
- 表示為整數或浮點數。
- 可以是正數、負數,或零。
示例:
42
3.14
- 布林值(Boolean)
表示為 true
或 false
。
示例:
true
false
- 空值(Null)
表示為空值,使用 null
。
示例:
null
2. 示例程式碼
2.1 讀取JSON檔案
在Python中,你可以使用json
模組讀取JSON檔案。這是最常見的操作。
import json
# 讀取JSON檔案
with open('data.json', 'r', encoding='utf-8') as file:
data = json.load(file) # 讀取並解析JSON資料
# 列印資料
print(data)
這裡我們使用json.load()
讀取並解析JSON檔案,並將結果儲存在data
變數中。
2.2 寫入JSON檔案
你可以使用json.dump()
將Python資料結構寫入JSON檔案。
import json
# 要寫入的Python資料
data = {
"name": "Alice",
"age": 30,
"skills": ["Python", "Data Analysis", "Machine Learning"]
}
# 寫入到JSON檔案
with open('output.json', 'w', encoding='utf-8') as file:
json.dump(data, file, indent=4) # 使用縮排格式化輸出
這個示例使用json.dump()
將字典寫入JSON檔案。
2.3 解析JSON字串
有時資料可能以JSON字串的形式存在。這時你可以使用json.loads()
來解析它。
import json
# 一個JSON字串
json_str = '{"name": "Bob", "age": 25, "city": "New York"}'
# 解析JSON字串
data = json.loads(json_str)
print(data) # {'name': 'Bob', 'age': 25, 'city': 'New York'}
2.4 將Python資料轉換為JSON字串
與解析JSON字串類似,你可以使用json.dumps()
將Python資料轉換為JSON字串。
import json
# 一個Python資料結構
data = {
"name": "Charlie",
"hobbies": ["Reading", "Swimming", "Hiking"]
}
# 將Python資料轉換為JSON字串
json_str = json.dumps(data, indent=4)
print(json_str) # JSON格式的字串
2.5 處理複雜JSON資料
JSON資料可以包含巢狀的結構。Python可以方便地處理這些複雜資料。
import json
# 一個包含巢狀結構的JSON
nested_json = {
"name": "Dave",
"age": 40,
"children": [
{"name": "Amy", "age": 10},
{"name": "Ben", "age": 8}
],
"contact": {
"email": "dave@example.com",
"phone": "+1234567890"
}
}
# 將Python資料轉換為JSON字串
json_str = json.dumps(nested_json, indent=4)
print(json_str)
在這個示例中,我們建立了一個包含巢狀結構的Python資料,然後將其轉換為JSON字串以進行輸出。
3. 總結
3.1 json模組中load、loads、dump、dumps函式的區別總結
函式 | 描述 | 引數 | 返回值 | 用途 |
---|---|---|---|---|
load |
從檔案讀取JSON資料,並轉換為Python物件 | - file object: 包含JSON資料的檔案物件 | Python物件 | 從檔案中讀取並解析JSON資料 |
loads |
從字串讀取JSON資料,並轉換為Python物件 | - str: JSON格式的字串 | Python物件 | 從字串中讀取並解析JSON資料 |
dump |
將Python物件編碼為JSON資料並寫入檔案 | - obj: Python物件 - file object: 檔案物件 |
無 | 將Python物件寫入檔案中 |
dumps |
將Python物件編碼為JSON格式的字串 | - obj: Python物件 | JSON格式的字串 | 將Python物件轉換為JSON字串 |
3.2 JSON型別與Python型別的對照表
JSON 型別 | Python 型別 | 示例 |
---|---|---|
object |
dict |
{"name": "John", "age": 30} -> {'name': 'John', 'age': 30} |
array |
list |
[1, 2, 3] -> [1, 2, 3] |
string |
str |
"hello" -> 'hello' |
number |
int 或 float |
42 -> 42 3.14 -> 3.14 |
true |
True |
true -> True |
false |
False |
false -> False |
null |
None |
null -> None |
3.3 區分Python字典和JSON格式的字串
1. 語法上區分
- Python 字典: 是一種記憶體中的資料結構,包含鍵值對,鍵可以是任何不可變的資料型別,值可以是任意資料型別。
- JSON: 是一種用於資料交換的字串格式,鍵和值都必須是特定型別(鍵必須是字串,值可以是字串、數字、陣列、物件、布林值或 null)。
2. JSON和 Python 字典的使用場景
- Python 字典:用於在 Python 程式內部處理資料。
- JSON 字串:用於在不同系統之間交換資料(例如,前後端通訊、資料儲存等)。