Python - JSON

JSON in Python

JSON trong Python là một định dạng dữ liệu phổ biến được sử dụng để trao đổi dữ liệu giữa các hệ thống. Mô-đun json cung cấp các hàm để làm việc với dữ liệu JSON, cho phép bạn tuần tự hóa các đối tượng Python thành chuỗi JSON và giải tuần tự hóa các chuỗi JSON trở lại thành các đối tượng Python.

JSON (JavaScript Object Notation) is a lightweight data interchange format that is easy for humans to read and write, and easy for machines to parse and generate. It is mainly used to transmit data between a server and web application as text.

JSON Serialization

Xử lý JSON là quá trình chuyển đổi một đối tượng Python thành định dạng JSON. Điều này rất hữu ích cho việc lưu trữ dữ liệu ở một định dạng có thể dễ dàng truyền tải hoặc lưu trữ, và sau đó được tái tạo lại vào dạng ban đầu của nó.

Python cung cấp mô-đun json để xử lý việc tuần tự hóa và giải tuần tự hóa JSON. Chúng ta có thể sử dụng phương thức json.dumps() để tuần tự hóa trong mô-đun này.

Bạn có thể tuần tự hóa các kiểu đối tượng Python sau thành chuỗi JSON −

  • dict
  • list
  • tuple
  • str
  • int
  • float
  • bool
  • None

Example

Dưới đây là một ví dụ cơ bản về cách tuần tự hóa một từ điển Python thành một chuỗi JSON −

import json

# Python dictionary
data = {"name": "Alice", "age": 30, "city": "New York"}

# Serialize to JSON string
json_string = json.dumps(data)
print(json_string)

Nó sẽ tạo ra đầu ra sau đây −

{"name": "Alice", "age": 30, "city": "New York"}

JSON Deserialization

Deserialization JSON là quá trình chuyển đổi một chuỗi JSON trở lại thành một đối tượng Python. Điều này rất quan trọng để đọc và xử lý dữ liệu đã được truyền hoặc lưu trữ ở định dạng JSON.

Trong Python, chúng ta có thể sử dụng phương thức json.loads() để giải mã dữ liệu JSON từ một string , và phương thức json.load() để giải mã dữ liệu JSON từ một file .

Example: Deserialize JSON string to Python object

Trong ví dụ sau, chúng ta đang giải mã một chuỗi JSON thành một từ điển Python bằng cách sử dụng phương thức json.loads() −

import json

# JSON string
json_string = '{"name": "John", "age": 30, "is_student": false, "courses": ["Math", "Science"], "address": {"city": "New York", "state": "NY"}}'

# Deserialize JSON string to Python object
python_obj = json.loads(json_string)

print(python_obj)

Dưới đây là đầu ra của đoạn mã ở trên −

{'name': 'John', 'age': 30, 'is_student': False, 'courses': ['Math', 'Science'], 'address': {'city': 'New York', 'state': 'NY'}}

Example: Deserialize JSON from File

Bây giờ, để đọc và giải tuần tự dữ liệu JSON từ một tệp, chúng ta sử dụng phương thức json.load().

import json

# Read and deserialize from file
with open("data.json", "r") as f:
   python_obj = json.load(f)

print(python_obj)

Đầu ra của đoạn mã trên như sau −

{'name': 'John', 'age': 30, 'is_student': False, 'courses': ['Math', 'Science'], 'address': {'city': 'New York', 'state': 'NY'}}

Advanced JSON Handling

Nếu dữ liệu JSON của bạn bao gồm các đối tượng cần xử lý đặc biệt (ví dụ: các lớp tùy chỉnh), bạn có thể định nghĩa các hàm giải mã tùy chỉnh. Sử dụng tham số object_hook của phương thức json.loads() hoặc json.load() để chỉ định một hàm sẽ được gọi với kết quả của mỗi đối tượng JSON được giải mã.

Example

Trong ví dụ dưới đây, chúng tôi đang minh họa việc sử dụng tuần tự hóa đối tượng tùy chỉnh −

import json
from datetime import datetime

# Custom deserialization function
def custom_deserializer(dct):
   if 'joined' in dct:
      dct['joined'] = datetime.fromisoformat(dct['joined'])
   return dct

# JSON string with datetime
json_string = '{"name": "John", "joined": "2021-05-17T10:15:00"}'

# Deserialize with custom function
python_obj = json.loads(json_string, object_hook=custom_deserializer)

print(python_obj)

Chúng ta nhận được đầu ra như hình dưới đây −

{'name': 'John', 'joined': datetime.datetime(2021, 5, 17, 10, 15)}

JSONEncoder Class

Lớp JSONEncoder trong Python được sử dụng để mã hóa các cấu trúc dữ liệu Python thành định dạng JSON. Mỗi kiểu dữ liệu Python được chuyển đổi thành kiểu JSON tương ứng của nó, như được hiển thị trong bảng sau −

Python JSON
Dict object
list, tuple array
Str string
int, float, int- & float-derived Enums number
True true
False false
None null

Lớp JSONEncoder được khởi tạo bằng cách sử dụng hàm tạo JSONEncoder() . Các phương thức quan trọng sau đây được định nghĩa trong lớp này −

  • encode(obj) − Chuyển đổi một đối tượng Python thành một chuỗi định dạng JSON.

  • iterencode(obj) − Mã hóa đối tượng và trả về một bộ lặp (iterator) mà trả về dạng mã hóa của từng mục trong đối tượng.

  • indent − Xác định mức độ thụt lề của chuỗi đã mã hóa.

  • sort_keys − Nếu đúng, các khóa sẽ xuất hiện theo thứ tự đã sắp xếp.

  • check_circular − Nếu đúng, kiểm tra các tham chiếu vòng trong các đối tượng kiểu container.

Example

Trong ví dụ sau, chúng ta đang mã hóa đối tượng danh sách Python. Chúng ta sử dụng phương thức iterencode() để hiển thị từng phần của chuỗi đã mã hóa −

import json

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

# Using iterencode() method 
for obj in e.iterencode(data):
   print(obj)

Nó sẽ tạo ra đầu ra sau đây −

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

JSONDecoder class

Lớp JSONDecoder được sử dụng để giải mã một chuỗi JSON trở lại thành một cấu trúc dữ liệu Python. Phương thức chính trong lớp này là decode().

Example

Trong ví dụ này, "JSONEncoder" được sử dụng để mã hóa một danh sách Python thành một chuỗi JSON, và sau đó "JSONDecoder" được sử dụng để giải mã chuỗi JSON trở lại thành một danh sách Python.

import json

data = ['Rakesh', {'marks': (50, 60, 70)}]
e = json.JSONEncoder()
s = e.encode(data)
d = json.JSONDecoder()
obj = d.decode(s)
print(obj, type(obj))

Kết quả thu được như hình dưới đây −

['Rakesh', {'marks': [50, 60, 70]}] <class 'list'>