JSON(JavaScript Object Notation)是一種輕量級的資料交換格式,易於人閱讀和編寫,同時也易於機器解析和生成。它基於JavaScript的一個子集,但JSON是獨立於語言的,很多程式語言都支援JSON格式的資料的生成和解析。
JSON的特點包括:
- 文字格式: JSON是純文字,可以被任何程式語言讀取和生成。
- 結構簡單: 使用鍵值對儲存資料,結構清晰,易於理解。
- 易於解析: 大多數程式語言都有現成的庫來解析JSON資料,將其轉換為本地物件。
- 易於傳輸: 由於是文字格式,JSON資料可以很容易地透過HTTP等協議傳輸。
- 語言無關: 雖然JSON源自JavaScript,但它是獨立於語言的,幾乎所有的現代程式語言都支援JSON。
JSON資料的基本型別包括:
- 字串: 用雙引號括起來的文字。
- 數字: 沒有引號的數值。
- 布林值:
True
或False
。 - 陣列: 用方括號括起來的值序列,例如
["apple", "banana", "cherry"]
。 - 物件: 用大括號括起來的鍵值對集合,例如
{"name": "Lilian", "age": 21}
。 - null: 表示空值。
JSON物件示例:
{
"name": "Lilian",
"age": 21,
"isEmployed": False,
"skills": ["math", "music", "web crawler"],
"address": {
"street": "Num.360, JinNiu District",
"city": "CD",
"province": "SC"
}
}
python中有自帶的json標準庫能處理json資料,提供的基本功能有:
- 序列化(編碼): 將python物件轉換為JSON格式的字串。
json.dumps(obj)
: 將python物件obj轉換成json字串。json.dump(obj)
: 將python物件obj轉換為json字串並寫入到檔案中。
- 反序列化(解碼): 將JSON格式的字串轉換回python物件。
json.loads(json_str)
: 將JSON字串json_str轉換為python物件。json.load(file)
: 從檔案讀取JSON字串並將其轉換為python物件。
示例程式碼:
import json
# python中JSON物件會被解析成字典格式,陣列被解析為列表,字串解析為字串str,數字解析為整數int或浮點數float,布林值解析為布林值,null解析為None
# 字串中的key需要加上雙引號,不能用單引號
str_ = '{"name": "戰狼3"}'
print(type(str_)) # <class 'str'>
print('--------str to obj---------')
obj = json.loads(str_)
print(type(obj)) # <class 'dict'>
print('--------obj to str---------')
tmp_str = json.dumps(obj, ensure_ascii=False)
print(tmp_str) # {"name": "戰狼3"}
print(type(tmp_str)) # <class 'str'>
print('---------obj to file---------')
json.dump(obj, open('json.txt', 'w', encoding='utf8'), ensure_ascii=False)
print('---------file to obj---------')
obj2 = json.load(open('json.txt', 'r', encoding='utf8'))
print(obj2) # {"name": "戰狼3"}
print(type(obj2)) # <class 'dict'>
除了基本功能,json還支援自定義編碼器和解碼器來處理特定型別的轉換,JSONDecoder類用於自定義解碼JSON資料,JSONEncoder類用於自定義編碼python物件到JSON資料。
還提供了異常處理機制: json.JSONDecodeError。
詳細資訊檢視python官網:https://docs.python.org/3.12/library/json.html#basic-usage
json線上解析網站:http://www.json.cn/#