如何將json資料轉換為python資料
阿新 • • 發佈:2020-09-06
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陣列
程式碼如下
import json age = 10 #dumps把資料轉化為json語法中的數值資料 json_data = json.dumps(age) print(json_data) name = '橙子' json_dta =json.dumps(name) print(json_data) person ={"chinese":99} json_data =json.dumps(person) print(json_data) #在python中可自定義型別 自定義的型別 在json中沒有對應的資料格式 #需要制定編碼規則 通過編碼規則 將自定義型別的資料轉換為json可識別的資料 class Person(): def __init__(self,name): self.name = name def __str__(self): return f"Person(name={self.name})" #__repr__通過容器呼叫物件呼叫__repr__ #__str__當列印物件時輸出設定的格式資訊 __repr__ =__str__ p = Person("橙子") print(p) print(type(p))#<class '__main__.Person'> #在json中無對應資料 #儲存Person型別的資料-需獲取json可識別資料格式 #方式1 #物件__dict__獲取物件的特徵資訊以字典形式儲存 json_data = json.dumps(p.__dict__) print(json_data)#{"name": "\u6a59\u5b50"} #本質上儲存的是字典 #loads解析為json資料 python_data =json.loads(json_data) print(python_data) #對應物件為Person物件 需要根據資料資訊建立物件 p = Person(python_data["name"]) print(p,type(p))#Person(name=橙子) <class '__main__.Person'> #方法二儲存時設定編碼規則 存的是指定的編碼規則資料 #獲取的時候要對應有一個解碼規則 在根據資料解析成物件 #對以上操作封裝 #PersonEncoder編碼 class PersonEncoder(json.JSONEncoder): #重寫方法 #這個方法在dumps時 內部自動呼叫 #子類重寫父類的方法 子類對黨呼叫時 只能呼叫重寫 因為會吧父類方法覆蓋 def default(self,o): #把規則寫出來 #o 表示要進行json轉換的物件 return o.__dict__ P =Person('橙子2') #CLS制定編碼規則 #物件__dict__獲取物件的特徵資訊以字典形式儲存 json_data =json.dumps(P,cls=PersonEncoder) print(json_data)#{"name": "\u6a59\u5b502"} #解析JSONDecoder class PersonDecoder(json.JSONDecoder): def __init__(self): #指定解碼規則 #object_hook物件掛鉤-物件解析-接受的是一個函式 super().__init__(object_hook=self.to_python_obj) def to_python_obj(self,d): #d接受的是字典,當前制定的轉化為json物件的資料格式 return Person(d['name']) #解析操作 python_data =json.loads(json_data,cls=PersonDecoder) print(python_data)#Person(name=橙子2)
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。