国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - 簡單介紹Python中的JSON使用

簡單介紹Python中的JSON使用

2020-06-15 10:03廖雪峰 Python

這篇文章主要介紹了Python中的JSON使用,示例代碼基于Python2.x版本,需要的朋友可以參考下

JSON進階

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

?
1
2
3
4
5
6
7
8
9
10
import json
 
class Student(object):
  def __init__(self, name, age, score):
    self.name = name
    self.age = age
    self.score = score
 
s = Student('Bob', 20, 88)
print(json.dumps(s))

運行代碼,毫不留情地得到一個TypeError:

?
1
2
3
Traceback (most recent call last):
 ...
TypeError: <__main__.Student object at 0x10aabef50> is not JSON serializable

錯誤的原因是Student對象不是一個可序列化為JSON的對象。

如果連class的實例對象都無法序列化為JSON,這肯定不合理!

別急,我們仔細看看dumps()方法的參數列表,可以發現,除了第一個必須的obj參數外,dumps()方法還提供了一大堆的可選參數:

https://docs.python.org/2/library/json.html#json.dumps

這些可選參數就是讓我們來定制JSON序列化。前面的代碼之所以無法把Student類實例序列化為JSON,是因為默認情況下,dumps()方法不知道如何將Student實例變為一個JSON的{}對象。

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

?
1
2
3
4
5
6
7
8
def student2dict(std):
  return {
    'name': std.name,
    'age': std.age,
    'score': std.score
  }
 
print(json.dumps(s, default=student2dict))

這樣,Student實例首先被student2dict()函數轉換成dict,然后再被順利序列化為JSON。

不過,下次如果遇到一個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實例:

?
1
2
3
4
5
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))

運行結果如下:

?
1
<__main__.Student object at 0x10cd3c190>

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

Python語言特定的序列化模塊是pickle,但如果要把序列化搞得更通用、更符合Web標準,就可以使用json模塊。

json模塊的dumps()和loads()函數是定義得非常好的接口的典范。當我們使用時,只需要傳入一個必須的參數。但是,當默認的序列化或反序列機制不滿足我們的要求時,我們又可以傳入更多的參數來定制序列化或反序列化的規則,既做到了接口簡單易用,又做到了充分的擴展性和靈活性。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 亚洲 中文 欧美 日韩 在线观看 | 欧美中文字幕一区二区 | 看亚洲a级一级毛片 | 91国内外精品自在线播放 | 久久男人精品 | 久草福利在线视频 | 国产在线精品一区二区 | 欧美精品一区二区三区在线播放 | 日韩有码一区 | 亚洲精品一区二区三区在线播放 | 午夜国产 | 亚洲人成网站b2k3cm | 免费看少妇高潮一级毛片特黄 | 黄色在线免费观看 | 亚洲视频在线看 | 91在线影院 | 久久久久久免费毛片精品 | 欧美成人一区二区 | 99re视频在线观看 | 亚洲视频 欧美视频 | 欧美亚洲国产日韩 | 懂色一区| 欧美激情久久久 | 欧美久久久久 | 中文字幕在线资源 | 亚洲一区二区三区免费观看 | 永久免费av片在线观看全网站 | 亚洲一区二区三区在线视频 | 国产在线不卡 | 黄在线免费观看 | 玖玖在线免费视频 | 国产h片在线观看 | 午夜影院免费 | 国产精品黄色 | 亚洲福利一区二区 | 国内久久精品 | 欧美精品1 | 国产欧美精品一区二区色综合 | 互换娇妻呻吟hd中文字幕 | 欧美久久久久久久久久 | 日韩在线精品 |