Computer >> Máy Tính >  >> Lập trình >> Python

Gói mã hóa và giải mã JSON bằng Python

JSON là viết tắt của JavaScript Object Notation. Đây là một định dạng trao đổi dữ liệu nhẹ. Nó tương tự như dưa muối. Tuy nhiên, tuần tự hóa pickle là đặc trưng của Python trong khi định dạng JSON được thực hiện bởi nhiều ngôn ngữ. Mô-đun json trong thư viện chuẩn của Python triển khai chức năng tuần tự hóa đối tượng tương tự như mô-đun pickle và marshal.

Cũng giống như trong mô-đun pickle, mô-đun json cũng cung cấp hàm dumps () và load () để tuần tự hóa đối tượng Python thành chuỗi được mã hóa JSON, và các hàm dump () và load () viết và đọc các đối tượng Python được tuần tự hóa đến / từ tệp.

kết xuất ()

Hàm này chuyển đổi đối tượng thành định dạng JSON.

tải ()

Hàm này chuyển đổi một chuỗi JSON trở lại đối tượng Python.

Ví dụ sau giảm tốc độ sử dụng cơ bản của các chức năng này.

>>> 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]}]

Hàm dumps () có thể nhận đối số sort_keys tùy chọn. Theo mặc định, nó là False. Nếu được đặt thành True, các khóa từ điển sẽ xuất hiện theo thứ tự được sắp xếp trong chuỗi 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}

Hàm dumps () có một tham số tùy chọn khác được gọi là thụt lề, nhận một số làm giá trị. Nó quyết định độ dài của mỗi đoạn biểu diễn được định dạng của chuỗi json, tương tự như đầu ra pprint.

>>> data = ['Rakesh',{'marks':(50,60,70)}]
>>> s = json.dumps(data, indent=2)
>>> print (s)
[
   "Rakesh",{
      "marks": [
         50,
         60,
         70
      ]
   }
]

Mô-đun json cũng có API hướng đối tượng tương ứng với các chức năng trên. Có hai lớp được định nghĩa trong mô-đun - JSONEncoder và JSONDecoder.

JSONEncoder lớp

Đối tượng của lớp này là bộ mã hóa cho cấu trúc dữ liệu Python. Mỗi kiểu dữ liệu Python được chuyển đổi theo kiểu JSON tương ứng như được hiển thị trong bảng sau.

Python JSON
dict đối tượng
danh sách, tuple mảng
str string
int, float, int- &float-origin Enums số
Đúng Đúng
Sai false
Không có null

Lớp JSONEncoder được khởi tạo bởi phương thức khởi tạo JSONEncoder (). Các phương thức quan trọng sau được định nghĩa trong lớp mã hóa

  • mã hóa () - tuần tự hóa đối tượng Python thành định dạng JSON

  • mã lặp () - Mã hóa đối tượng và trả về một trình lặp tạo ra dạng được mã hóa của từng mục trong đối tượng.

  • thụt lề - Xác định mức thụt lề của chuỗi được mã hóa

  • sort_keys - là đúng hoặc sai để làm cho các khóa xuất hiện theo thứ tự được sắp xếp hoặc không.

  • Check_circular - nếu Đúng, hãy kiểm tra tham chiếu vòng tròn trong đối tượng loại vùng chứa

Ví dụ sau mã hóa đối tượng danh sách Python.

>>> e=json.JSONEncoder()
>>> e.encode(data)
'["Rakesh", {"marks": [50, 60, 70]}]'

Sử dụng phương thức iterencode (), mỗi phần của chuỗi mã hóa được hiển thị như bên dưới

>>> for obj in e.iterencode(data):
print (obj)
[
   "Rakesh"
   {
      "marks"
      :
      [
         50
         , 60
         , 70
      ]
   }
]

Lớp JSONDEcoder

Đối tượng của lớp này giúp giải mã trong chuỗi json trở lại truture dữ liệu Python. Phương thức chính trong lớp này là decode (). Mã ví dụ sau truy xuất đối tượng danh sách Python từ chuỗi được mã hóa ở bước trước.

>>> d=json.JSONDecoder()
>>> d.decode(s)
['Rakesh', {'marks': [50, 60, 70]}]

JSON với tệp / luồng

Mô-đun json định nghĩa các hàm load () và dump () để ghi dữ liệu JSON vào một tệp như đối tượng - có thể là tệp đĩa hoặc luồng byte và đọc dữ liệu trở lại từ chúng.

dump ()

Hàm này mã hóa dữ liệu đối tượng Python ở định dạng JSON và ghi nó vào một tệp. Tệp phải có quyền ghi.

>>> data=['Rakesh', {'marks': (50, 60, 70)}]
>>> fp=open('json.txt','w')
>>> json.dump(data,fp)
>>> fp.close()

Mã này sẽ tạo ‘json.txt’ trong thư mục hiện tại. Nó hiển thị các nội dung như sau

["Rakesh", {"marks": [50, 60, 70]}]

load ()

Hàm này tải dữ liệu JSON từ tệp và xây dựng đối tượng Python từ nó. Tệp phải được mở với quyền đọc.

>>> fp=open('json.txt','r')
>>> ret=json.load(fp)
>>> ret
['Rakesh', {'marks': [50, 60, 70]}]
>>> fp.close()

Bài viết này trình bày các chức năng quan trọng trong mô-đun json.