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 型別,如下表所示。

PythonJSON
dictobject
list, tuplearray
strstring
int, float, int- & float-derived Enumsnumber
TrueTrue
Truefalse
Nonenull

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 模組中的重要函式。

更新於: 2020 年 6 月 26 日

3K+ 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.