日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python json解析方法_Python 中的 JSON 方式讲解

發布時間:2024/8/1 python 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python json解析方法_Python 中的 JSON 方式讲解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python的dict對象可以直接序列化為JSON的{},不過,很多時候,我們更喜歡用class表示對象,比如定義Student類,然后序列化,代碼如下:import?json

class?Student(object):

def?__init__(self,?name,?age,?score):

self.name?=?name

self.age?=?age

self.score?=?score

s?=?Student('Bob',?26,?100)

print(json.dumps(s))

運行代碼,報TypeError錯,如下:Traceback?(most?recent?call?last):

...

TypeError:?<__main__.student>?is?not?JSON?serializable

錯誤的原因是Student對象不是一個可序列化為JSON的對象,dumps()方法提供了很多可選參數。

參考地址為https://docs.python.org/2/library/json.html#json.dumps這些可選參數就是讓我們來定制JSON序列化使用的。

可選參數default就是把任意一個對象變成一個可序列為JSON的對象,我們只需要為Student專門寫一個轉換函數,再把函數傳進去即可:def?student2dict(std):

return?{

'name':?std.name,

'age':?std.age,

'score':?std.score

}

print(json.dumps(s,?default=student2dict))

如果遇到另外一個對象Teacher類實例時照樣無法序列化為JSON對象的在這里可以把任意class的實例變為dict:print(json.dumps(s,?default=lambda?obj:?obj.__dict__))

因為通常class的實例都有一個__dict__屬性,它就是一個dict,用來存儲實例變量。也有少數例外,比如定義了__slots__的class。

同理,如果我們要把JSON反序列化為一個Student對象實例,loads()方法首先轉換出一個dict對象,然后,我們傳入的object_hook函數負責把dict轉換為Student實例:def?dict2student(d):

return?Student(d['name'],?d['age'],?d['score'])

json_str?=?'{"age":?20,?"score":?88,?"name":?"Bob"}'

print(json.loads(json_str,?object_hook=dict2student))

運行結果如下:<__main__.student>

打印出的是反序列化的Student實例對象。

總結

以上是生活随笔為你收集整理的python json解析方法_Python 中的 JSON 方式讲解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。