Python 中的 JSON 編碼器和解碼器包
JSON 代表 JavaScript 物件表示法。它是一種輕量級的資料交換格式。它類似於 pickle。但是,pickle 序列化是特定於 Python 的,而 JSON 格式由多種語言實現。Python 標準庫中的 json 模組實現了類似於 pickle 和 marshal 模組的物件序列化功能。
就像 pickle 模組一樣,json 模組也提供了 dumps() 和 loads() 函式,用於將 Python 物件序列化為 JSON 編碼的字串,以及 dump() 和 load() 函式,用於將序列化後的 Python 物件寫入/讀取到檔案。
dumps()
此函式將物件轉換為 JSON 格式。
loads()
此函式將 JSON 字串轉換回 Python 物件。
以下示例演示了這些函式的基本用法。
>>> import json
>>> data=['Rakesh',{'marks':(50,60,70)}]
>>> s=json.dumps(data)
>>> s
'["Rakesh", {"marks": [50, 60, 70]}]'
>>> json.loads(s)
['Rakesh', {'marks': [50, 60, 70]}]Th dumps() 函式可以接受可選的 sort_keys 引數。預設情況下為 False。如果設定為 True,則字典鍵將按排序順序出現在 JSON 字串中。
>>> data={"marks":50, "age":20, "rank":5}
>>> s=json.dumps(data, sort_keys=True)
>>> s
'{"age": 20, "marks": 50, "rank": 5}'
>>> json.loads(s)
{'age': 20, 'marks': 50, 'rank': 5}dumps() 函式還有一個可選引數稱為 indent,它接受一個數字作為值。它決定了 json 字串格式化表示的每個段的長度,類似於 pprint 輸出。
>>> data = ['Rakesh',{'marks':(50,60,70)}]
>>> s = json.dumps(data, indent=2)
>>> print (s)
[
"Rakesh",{
"marks": [
50,
60,
70
]
}
]json 模組還具有與上述函式相對應的面向物件 API。模組中定義了兩個類 - JSONEncoder 和 JSONDecoder。
JSONEncoder 類
此類的物件是 Python 資料結構的編碼器。每個 Python 資料型別都轉換為相應的 JSON 型別,如下表所示。
| Python | JSON |
|---|---|
| dict | object |
| list, tuple | array |
| str | string |
| int, float, int- & float-derived Enums | number |
| True | True |
| True | false |
| None | null |
JSONEncoder 類由 JSONEncoder() 建構函式例項化。編碼器類中定義了以下重要方法
**encode()** - 將 Python 物件序列化為 JSON 格式
**iterencode()** - 編碼物件並返回一個迭代器,該迭代器生成物件中每個專案的編碼形式。
**indent** - 確定編碼字串的縮排級別
**sort_keys** - 為 true 或 false,使鍵按排序順序出現或不出現。
**check_circular** - 如果為 True,則檢查容器型別物件中的迴圈引用
以下示例編碼 Python 列表物件。
>>> e=json.JSONEncoder()
>>> e.encode(data)
'["Rakesh", {"marks": [50, 60, 70]}]'使用 iterencode() 方法,編碼字串的每個部分如下所示
>>> for obj in e.iterencode(data):
print (obj)
[
"Rakesh"
{
"marks"
:
[
50
, 60
, 70
]
}
]JSONDEcoder 類
此類的物件有助於將 json 字串解碼回 Python 資料結構。此類中的主要方法是 decode()。以下示例程式碼從前面步驟中編碼的字串中檢索 Python 列表物件。
>>> d=json.JSONDecoder()
>>> d.decode(s)
['Rakesh', {'marks': [50, 60, 70]}]JSON 與檔案/流
json 模組定義了 load() 和 dump() 函式,用於將 JSON 資料寫入檔案類物件(可能是磁碟檔案或位元組流)並從中讀取資料。
dump()
此函式以 JSON 格式編碼 Python 物件資料並將其寫入檔案。該檔案必須具有寫入許可權。
>>> data=['Rakesh', {'marks': (50, 60, 70)}]
>>> fp=open('json.txt','w')
>>> json.dump(data,fp)
>>> fp.close()此程式碼將在當前目錄中建立“json.txt”。它顯示內容如下
["Rakesh", {"marks": [50, 60, 70]}]load()
此函式從檔案中載入 JSON 資料並從中構建 Python 物件。該檔案必須以讀取許可權開啟。
>>> fp=open('json.txt','r')
>>> ret=json.load(fp)
>>> ret
['Rakesh', {'marks': [50, 60, 70]}]
>>> fp.close()本文介紹了 json 模組中的重要函式。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP