Làm việc với JSON trong Python
JSON hưởng hỗ trợ rộng qua một kim tự tháp các ngôn ngữ. Một tài liệu JSON thường có thể chập trực tiếp vào các cấu
trúc dữ liệu bản địa trong các ngôn ngữ như Python (dictionaries, lists). Chúng ta sẽ nhìn cụ thể hơn vào làm cách nào
làm việc với JSON trong Python.
Dữ liệu JSON của chúng ta được lưu giữ trong một text file đơn giản:
{
“hostname”: “CORESW01”,
“vendor”: “Cisco”,
“isAlive”: true,
“uptime”: 123456,
“users”: {
“admin”: 15,
“storage”: 10,
},
“vlans”: [
{
“vlan_name”: “VLAN30”,
“vlan_id”: 30
},
{
“vlan_name”: “VLAN20”,
“vlan_id”: 20
}
]
}
Python có các công cụ cho làm việc với JSON xây dựng ngay vào thư viện tiêu chuẩn của nó, gọi là json package. Trong
code dưới, bạn có thể đọc file JSON này, chuyển nó (load) thành một Python dictionary, và in ra một vài thông tin
hữu dụng về nó (các inline comments có thể giúp giải thích mỗi bước một chút chi tiết hơn).
# Python contains very useful tools for working with JSON, and they’re
# part of the standard library, meaning they’re built into Python itself.
import json
# We can load our JSON file into a variable called “data”
with open(“json-example.json”) as f:
data = f.read()
# Since our JSON document is an Object, json.loads() returns a dictionary.
# If our document was an Array, this would result in a list.
json_dict = json.loads(data)
# Printing information about the resulting Python data structure
print(“The JSON document is loaded as type {0}\n”.format(type(json_dict)))
print(“Now printing each item in this document and the type it contains”)
for k, v in json_dict.items():
print(
“– The key {0} contains a {1} value.”.format(str(k), str(type(v)))
)
Một vài dòng cuối đó thể hiện chính xác Python xem dữ liệu này như thế nào một khi nó được nhập khẩu. Đầu ra cái là
kết quả từ chạy chương trình Python này như được thể hiện ở code dưới.
~ $ python json-example.py
The JSON document is loaded as type <type ‘dict’>
Now printing each item in this document and the type it contains
— The key uptime contains a <type ‘int’> value.
— The key isAlive contains a <type ‘bool’> value.
— The key users contains a <type ‘dict’> value.
— The key hostname contains a <type ‘unicode’> value.
— The key vendor contains a <type ‘unicode’> value.
— The key vlans contains a <type ‘list’> value.
Bạn có thể thấy dạng dữ liệu unicode cho lần đầu tiên. Trong Python, dạng str chính là một chuỗi các bytes, trong khi
unicode chỉ ra một mã hóa thực sự. Lí do bạn đang thấy nó ở đây là rằng tiêu chuẩn kĩ thuật JSON yêu cầu text được mã
hóa trong Unicode. Nên, nếu bạn là mới đối với mã hóa text, bạn có thể nghĩ về mặt khái niệm unicode như một dạng cụ
thể của string và hữu dụng cho các thứ cùng loại như dạng str (string) thảo luận trong học phần khác.
Bây giờ rằng bạn vừa nhập khẩu tài liệu JSON của bạn vào một cấu trúc dữ liệu Python bản địa, tất cả các công cụ
và kĩ thuật bạn học trong học phần sau có thể được sử dụng để tìm ra bất cứ thông tin nào bạn đang tìm kiếm.
Bạn cũng có thể thực hiện hành động đảo ngược – đó là, lấy dữ liệu cấu trúc Python và tạo một tài liệu JSON từ nó. Code
dưới tạo một Python list vendors và sử dụng phương thức json.dumps() để tạo tài liệu JSON chứa một mảng.
>>> import json
>>> vendors = []
>>> vendors.append(“Cisco”)
>>> vendors.append(“Arista”)
>>> vendors.append(“Juniper”)
>>> print(json.dumps(vendors, indent=2))
[
“Cisco”,
“Arista”,
“Juniper”
]