Python - JSON: Hướng Dẫn Đầu Bạn Về Xử Lý JSON Trong Python

Xin chào các bạn, các maestro Python tương lai! Hôm nay, chúng ta sẽ bắt đầu hành trình hấp dẫn vào thế giới JSON trong Python. Đừng lo nếu bạn mới bắt đầu học lập trình – tôi sẽ là người hướng dẫn bạn thân thiện, và chúng ta sẽ làm theo từng bước. Khi hết hướng dẫn này, bạn sẽ xử lý JSON như một chuyên gia!

Python - JSON

JSON Trong Python

JSON Là Gì?

JSON, hoặc JavaScript Object Notation, là định dạng trao đổi dữ liệu nhẹ. Hãy nghĩ về nó như một cách để lưu trữ và chuyển đổi dữ liệu – giống như một ngôn ngữ đa năng mà các chương trình khác có thể hiểu. Nó dễ đọc cho con người (điều rất tuyệt vời cho chúng ta!) và dễ dàng cho máy tính phân tích và tạo ra.

Trong thế giới lập trình, JSON như là cậu bé酷 mà mọi người đều muốn giao tiếp. Nó được sử dụng mọi nơi – từ các API web đến các tệp cấu hình. Đó là lý do tại sao việc học cách làm việc với JSON trong Python là kỹ năng quan trọng!

Tại Sao Sử Dụng JSON Với Python?

Python và JSON như mật ong và sữa – chúng hoạt động tuyệt vời cùng nhau! Python hỗ trợ JSON tích hợp sẵn thông qua mô-đun json. Điều này có nghĩa là bạn có thể dễ dàng chuyển đổi các đối tượng Python thành JSON và ngược lại.

Hãy bắt đầu bằng cách nhập mô-đun JSON:

import json

Đơn giản phải không? Bây giờ chúng ta sẵn sàng đánh nhau vào những thứ hấp dẫn!

Sérialization JSON

Sérialization chỉ là một thuật ngữ lễ lẽ cho việc chuyển đổi các đối tượng Python thành các chuỗi JSON. Nó giống như dịch Python sang một ngôn ngữ mà các chương trình khác có thể hiểu.

Sérialization Cơ Bản

Hãy bắt đầu với một từ điển Python đơn giản:

my_dict = {
"name": "Alice",
"age": 30,
"city": "Wonderland"
}

json_string = json.dumps(my_dict)
print(json_string)

Output:

{"name": "Alice", "age": 30, "city": "Wonderland"}

Ở đây, json.dumps() lấy từ điển Python của chúng ta và chuyển nó thành một chuỗi JSON. Nó như ma thuật, nhưng tốt hơn vì nó thực sự là mã!

In Đẹp

Đôi khi, chúng ta muốn JSON của mình trông đẹp và dễ đọc. Đó là nơi in đẹp đến từng:

pretty_json = json.dumps(my_dict, indent=4)
print(pretty_json)

Output:

{
"name": "Alice",
"age": 30,
"city": "Wonderland"
}

Tham số indent=4 nói với Python để thêm 4 khoảng trống động để căn trái, làm cho JSON của chúng ta trông gọn gàng và sạch sẽ.

Ghi JSON Vào Tệp

Thường, chúng ta muốn lưu dữ liệu JSON của mình vào một tệp. Dưới đây là cách:

with open('data.json', 'w') as file:
json.dump(my_dict, file, indent=4)

Điều này tạo ra một tệp có tên data.json và ghi JSON in đẹp của chúng ta vào đó. Nó giống như lưu tin nhắn, nhưng cho dữ liệu!

Desérialization JSON

Desérialization là quá trình ngược lại – chuyển đổi các chuỗi JSON trở lại thành các đối tượng Python. Nó giống như dịch ngôn ngữ đa năng đó trở lại thành Python.

Desérialization Cơ Bản

Hãy bắt đầu với một chuỗi JSON:

json_string = '{"name": "Bob", "age": 25, "city": "Neverland"}'

python_dict = json.loads(json_string)
print(python_dict)
print(type(python_dict))

Output:

{'name': 'Bob', 'age': 25, 'city': 'Neverland'}
<class 'dict'>

json.loads() lấy chuỗi JSON của chúng ta và chuyển nó trở lại thành một từ điển Python. Nó như ma thuật ngược lại!

Đọc JSON Từ Tệp

Nhớ rằng tệp mà chúng ta đã tạo trước đó? Hãy đọc nó lại:

with open('data.json', 'r') as file:
loaded_data = json.load(file)

print(loaded_data)

Điều này đọc dữ liệu JSON từ tệp của chúng ta và chuyển đổi nó trở lại thành một đối tượng Python. Nó giống như mở một tin nhắn đã lưu và đọc nó!

Xử Lý JSON Nâng Cao

Bây giờ đã quá khứ các khái niệm cơ bản, hãy xem xét một số kỹ thuật nâng cao.

Xử Lý Các Loại Dữ Liệu Phức Tạp

JSON rất tốt, nhưng nó chỉ hiểu một số loại dữ liệu một cách_native. Dưới đây là bảng của cách các loại Python ánh xạ sang JSON:

Python Type JSON Type
dict object
list, tuple array
str string
int, float number
True true
False false
None null

Nhưng thế nào với các loại phức tạp hơn như các đối tượng datetime? Đó là nơi mã hoá tùy chỉnh đến từng!

Lớp JSONEncoder

Lớp JSONEncoder cho phép chúng ta xác định mã hoá tùy chỉnh cho các đối tượng Python mà không được hỗ trợ một cách_native bởi JSON.

Dưới đây là một ví dụ với đối tượng datetime:

from datetime import datetime

class DateTimeEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime):
return obj.isoformat()
return super().default(obj)

data = {
"name": "Charlie",
"birthday": datetime(1990, 5, 15)
}

json_string = json.dumps(data, cls=DateTimeEncoder)
print(json_string)

Output:

{"name": "Charlie", "birthday": "1990-05-15T00:00:00"}

Mã hoá tùy chỉnh của chúng ta chuyển đổi đối tượng datetime thành chuỗi định dạng ISO, mà JSON có thể xử lý.

Lớp JSONDecoder

Tương tự, lớp JSONDecoder cho phép chúng ta tùy chỉnh cách JSON được giải mã trở lại thành các đối tượng Python.

Dưới đây là một ví dụ chuyển đổi các chuỗi định dạng ISO trở lại thành các đối tượng datetime:

import dateutil.parser

class DateTimeDecoder(json.JSONDecoder):
def __init__(self, *args, **kwargs):
json.JSONDecoder.__init__(self, object_hook=self.object_hook, *args, **kwargs)

def object_hook(self, obj):
for key, value in obj.items():
if isinstance(value, str):
try:
obj[key] = dateutil.parser.parse(value)
except ValueError:
pass
return obj

json_string = '{"name": "Charlie", "birthday": "1990-05-15T00:00:00"}'
decoded_data = json.loads(json_string, cls=DateTimeDecoder)
print(decoded_data)
print(type(decoded_data['birthday']))

Output:

{'name': 'Charlie', 'birthday': datetime.datetime(1990, 5, 15, 0, 0)}
<class 'datetime.datetime'>

Bộ giải mã tùy chỉnh của chúng ta nhận ra chuỗi định dạng ISO và chuyển đổi nó trở lại thành đối tượng datetime.

Và thế là xong, các bạn! Chúng ta đã hành trình qua thế giới JSON trong Python, từ các khái niệm cơ bản của sérialization và desérialization đến các khu vực nâng cao của mã hoá và giải mã tùy chỉnh. Hãy nhớ, luyện tập sẽ làm cho bạn hoàn hảo, vì vậy đừng sợ thử nghiệm với các khái niệm này.

JSON có thể có vẻ như là một phần nhỏ của Python, nhưng đó là kỹ năng quan trọng trong thế giới dữ liệu hiện nay. Dù bạn đang xây dựng ứng dụng web, làm việc với các API, hoặc phân tích dữ liệu, kỹ năng JSON mới của bạn sẽ mang lại ích lớn.

Hãy tiếp tục lập trình, học hỏi, và nhất quán là hãy vui chơi với Python!

Credits: Image by storyset