1. 程式人生 > 程式設計 >如何將json資料轉換為python資料

如何將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陣列

程式碼如下

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)

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。