JSON對象與Python字典的區別#
JSON對象是javascript object即javascript中的對象,是一種通用的格式,格式嚴格,不支持備注。
JSON文本和JSON對象的區別:
- JSON文本是符合JSON格式的文本,實際上是一個字符串
- JSON對象是內存中一個對象,擁有屬性和方法,可以通過對象獲取其中的參數信息
Python中我們一般提到JSON對象指的是字典
Python的字典的格式和JSON格式,稍有不同:
- 字典中的引號支持單引號和雙引號,JSON格式只支持雙引號
- 字典中的True/False首字母大寫,JSON格式為true/false
- 字典中的空值為None, JSON格式為null
'''
json 是數據存儲和交換文本信息的語法
javaScript對象表示法
用於數據傳遞
json中的數據格式 python中的數據
數字 整型 浮點數
字符串 字符串
布爾值 true false True False
數組 列表。元祖
對象 字典
null None
常見的json數據格式
{
code:200,
values:[
{"name":'lal','age':20}]
}
{} josn數據對應json對象
[] josn數組
'''
1 import json 2 age = 10 3 #dumps把數據轉化為json語法中的數值數據 4 json_data = json.dumps(age) 5 print(json_data) 6 7 name = '橙子' 8 json_dta =json.dumps(name) 9 print(json_data) 10 11 person ={"chinese":99} 12 json_data =json.dumps(person) 13 print(json_data) 14 15 16 17 #在python中可自定義類型 自定義的類型 在json中沒有對應的數據格式 18 #需要制定編碼規則 通過編碼規則 將自定義類型的數據轉換為json可識別的數據 19 class Person(): 20 def __init__(self,name): 21 self.name = name 22 def __str__(self): 23 return f"Person(name={self.name})" 24 #__repr__通過容器調用對象調用__repr__ 25 #__str__當打印對象時輸出設定的格式信息 26 __repr__ =__str__ 27 28 p = Person("橙子") 29 print(p) 30 print(type(p))#<class '__main__.Person'> 31 #在json中無對應數據 32 33 #存儲Person類型的數據-需獲取json可識別數據格式 34 #方式1 35 #對象__dict__獲取對象的特征信息以字典形式存儲 36 json_data = json.dumps(p.__dict__) 37 print(json_data)#{"name": "\u6a59\u5b50"} 38 #本質上存儲的是字典 39 40 #loads解析為json數據 41 python_data =json.loads(json_data) 42 print(python_data) 43 44 #對應對象為Person對象 需要根據數據信息創建對象 45 p = Person(python_data["name"]) 46 print(p,type(p))#Person(name=橙子) <class '__main__.Person'> 47 48 #方法二存儲時設置編碼規則 存的是指定的編碼規則數據 49 #獲取的時候要對應有一個解碼規則 在根據數據解析成對象 50 #對以上操作封裝 51 #PersonEncoder編碼 52 class PersonEncoder(json.JSONEncoder): 53 #重寫方法 54 #這個方法在dumps時 內部自動調用 55 #子類重寫父類的方法 子類對黨調用時 只能調用重寫 因為會吧父類方法覆蓋 56 def default(self, o): 57 #把規則寫出來 58 #o 表示要進行json轉換的對象 59 return o.__dict__ 60 P =Person('橙子2') 61 #CLS制定編碼規則 62 #對象__dict__獲取對象的特征信息以字典形式存儲 63 json_data =json.dumps(P,cls=PersonEncoder) 64 print(json_data)#{"name": "\u6a59\u5b502"} 65 66 #解析JSONDecoder 67 class PersonDecoder(json.JSONDecoder): 68 def __init__(self): 69 #指定解碼規則 70 #object_hook對象掛鈎-對象解析-接受的是一個函數 71 super().__init__(object_hook=self.to_python_obj) 72 73 def to_python_obj(self,d): 74 #d接受的是字典,當前制定的轉化為json對象的數據格式 75 return Person(d['name']) 76 77 #解析操作 78 python_data =json.loads(json_data,cls=PersonDecoder) 79 print(python_data)#Person(name=橙子2)