JAVASCRIPT OBJECT NOTATION (JSON)
JSON là một cấu trúc dữ liệu có nguồn gốc từ ngôn ngữ lập trình Java, nhưng nó có thể được sử dụng như một cấu trúc dữ liệu cho bất kỳ ngôn ngữ lập trình nào. Nó được xây dựng để dễ đọc và là tiêu chuẩn để trao đổi dữ liệu qua lại giữa các ứng dụng. JSON được sử dụng nhiều trong các dịch vụ web và là một trong những định dạng dữ liệu chủ chốt mà bạn cần biết cách sử dụng để tương tác với cơ sở hạ tầng mạng. Cấu trúc dữ liệu được xây dựng xung quanh các cặp khóa / giá trị giúp đơn giản hóa việc ánh xạ dữ liệu và truy xuất dữ liệu.
Ví dụ:
{
"interface": {
"name": "GigabitEthernet1",
"description": "Router Uplink",
"enabled": true,
"ipv4": {
"address": [
{
"ip": "192.168.1.1",
"netmask": "255.255.255.0"
}
]
}
}
}
“Interface” là đối tượng dữ liệu chính và bạn có thể thấy rằng giá trị của nó là nhiều cặp khóa - giá trị. Khả năng lồng ghép này cho phép bạn cấu trúc các mô hình dữ liệu rất phức tạp, khá giống với kiểu tự điển dictionaries trong Python. Bạn có thể dễ dàng chuyển đổi JSON thành dạng danh sách list (đối với mảng JSON) và dictionary (đối với đối tượng JSON) bằng mô-đun JSON tích hợp sẵn. Bao gồm 4 mô-đun chính:
>>>import json
>>>with open("json_sample.json") as data:
>>> json_data = data.read()
>>> json_dict = json.loads(json_data)
Đối tượng json_dict đã lấy đầu ra của json.loads (json_data) và bây giờ giữ đối tượng json như một dictionary Python. Bây giờ bạn có thể sửa đổi bất kỳ cặp khóa / giá trị nào, như trong ví dụ này, nơi phần mô tả được thay đổi:
>>> json_dict["interface"]["description"] = "Backup Link"
>>> print(json_dict)
{'interface': {'name': 'GigabitEthernet1', 'description': 'Backup Link', 'enabled': True, 'ipv4': {'address': [{'ip': '192.168.0.2', 'netmask': '255.255.255.0'}]}}}
Để lưu đối tượng json mới trở lại file, bạn phải sử dụng hàm dump () (không có s) để chuyển đổi dictionary Python trở lại thành đối tượng file JSON.
>>>with open("json_sample.json", "w") as fh:
>>> json.dump(json_dict, fh, indent = 4)
Tải thư viện JSON và in kết quả ra màn hình.
>>> with open ("json_sample.json") as data:
>>> json_data = data.read()
>>> print(json_data)
{
"interface": {
"name": "GigabitEthernet1",
"description": "Backup Link",
"enabled": true,
"ipv4": {
"address": [
{
"ip": "192.168.0.2",
"netmask": "255.255.255.0"
}
]
}
}
}
Tiếp theo chúng ta hãy khảo sát một ví dụ khác.
Ở đây, chúng ta có một thông tin về người dùng có tên là john được lưu trữ ở định dạng JSON. Cú pháp của JSON rất giống với dạng tự điển của Python. File JSON trong hình dưới đây có một khóa được gọi là user, và giá trị của nó là một object, tượng trưng cho một người dùng có tên là john.
Như bạn có thể thấy trong bảng chuyển đổi trên, cách chuyển đổi của JSON sang các đối tượng của Python cũng giống như cách chuyển đổi định dạng YAML. Một đối tượng JSON được dịch sang dạng tự điển của Python. Làm việc với JSON cũng tương tự như với YAML. Về mặt chức năng, định dạng JSON và YAML là tương tự nhau khi bạn viết các mã Python.
Đầu tiên, bạn phải mở định dạng file JSON và phân giải các thông tin bên trong sang dạng tự điển Python trước khi bạn có thể thao tác các dữ liệu đó. Để thực hiện việc đó, bạn dùng phương thức json.load(). Sau khi bạn đã hoàn thành làm việc với từ điển đó, bạn có thể lưu lại các thay đổi vào trong một file. Lúc này bạn sẽ dùng phương thức json.dump(), quá trình này sẽ chuyển các dữ liệu vào lại file JSON.
Nếu bạn đọc kỹ đoạn mã trong ví dụ, bạn có thể nhận thấy là đoạn mã cốt lõi cùng giống như trong ví dụ YAML. Vòng lặp tạo ra để chương đi đến tất cả các vai trò và sẽ in kết quả ra. Trong cả hai trường hợp, dữ liệu sẽ được phân giải thành dạng từ điển sao cho bạn có thể làm việc với cùng kiểu dữ liệu Python.
JSON là một cấu trúc dữ liệu có nguồn gốc từ ngôn ngữ lập trình Java, nhưng nó có thể được sử dụng như một cấu trúc dữ liệu cho bất kỳ ngôn ngữ lập trình nào. Nó được xây dựng để dễ đọc và là tiêu chuẩn để trao đổi dữ liệu qua lại giữa các ứng dụng. JSON được sử dụng nhiều trong các dịch vụ web và là một trong những định dạng dữ liệu chủ chốt mà bạn cần biết cách sử dụng để tương tác với cơ sở hạ tầng mạng. Cấu trúc dữ liệu được xây dựng xung quanh các cặp khóa / giá trị giúp đơn giản hóa việc ánh xạ dữ liệu và truy xuất dữ liệu.
Ví dụ:
{
"interface": {
"name": "GigabitEthernet1",
"description": "Router Uplink",
"enabled": true,
"ipv4": {
"address": [
{
"ip": "192.168.1.1",
"netmask": "255.255.255.0"
}
]
}
}
}
“Interface” là đối tượng dữ liệu chính và bạn có thể thấy rằng giá trị của nó là nhiều cặp khóa - giá trị. Khả năng lồng ghép này cho phép bạn cấu trúc các mô hình dữ liệu rất phức tạp, khá giống với kiểu tự điển dictionaries trong Python. Bạn có thể dễ dàng chuyển đổi JSON thành dạng danh sách list (đối với mảng JSON) và dictionary (đối với đối tượng JSON) bằng mô-đun JSON tích hợp sẵn. Bao gồm 4 mô-đun chính:
- load (): Nó cho phép bạn nhập JSON gốc và chuyển đổi nó thành dictionary Python từ một file.
- loads(): Thao tác này sẽ nhập dữ liệu JSON từ một chuỗi để chuyển đổi và thao tác trong chương trình của bạn.
- dump (): Hàm được sử dụng để ghi dữ liệu JSON từ các đối tượng Python vào một file.
- dumps (): Nó cho phép bạn lấy dữ liệu dictionary JSON và chuyển đổi nó thành một chuỗi được tuần tự hóa để chuyển đổi và sử dụng trong Python.
>>>import json
>>>with open("json_sample.json") as data:
>>> json_data = data.read()
>>> json_dict = json.loads(json_data)
Đối tượng json_dict đã lấy đầu ra của json.loads (json_data) và bây giờ giữ đối tượng json như một dictionary Python. Bây giờ bạn có thể sửa đổi bất kỳ cặp khóa / giá trị nào, như trong ví dụ này, nơi phần mô tả được thay đổi:
>>> json_dict["interface"]["description"] = "Backup Link"
>>> print(json_dict)
{'interface': {'name': 'GigabitEthernet1', 'description': 'Backup Link', 'enabled': True, 'ipv4': {'address': [{'ip': '192.168.0.2', 'netmask': '255.255.255.0'}]}}}
Để lưu đối tượng json mới trở lại file, bạn phải sử dụng hàm dump () (không có s) để chuyển đổi dictionary Python trở lại thành đối tượng file JSON.
>>>with open("json_sample.json", "w") as fh:
>>> json.dump(json_dict, fh, indent = 4)
Tải thư viện JSON và in kết quả ra màn hình.
>>> with open ("json_sample.json") as data:
>>> json_data = data.read()
>>> print(json_data)
{
"interface": {
"name": "GigabitEthernet1",
"description": "Backup Link",
"enabled": true,
"ipv4": {
"address": [
{
"ip": "192.168.0.2",
"netmask": "255.255.255.0"
}
]
}
}
}
Tiếp theo chúng ta hãy khảo sát một ví dụ khác.
Ở đây, chúng ta có một thông tin về người dùng có tên là john được lưu trữ ở định dạng JSON. Cú pháp của JSON rất giống với dạng tự điển của Python. File JSON trong hình dưới đây có một khóa được gọi là user, và giá trị của nó là một object, tượng trưng cho một người dùng có tên là john.
| JSON | Python | ||
| object |
|
||
| array |
|
||
| string |
|
||
| number (int) |
|
||
| number (real) |
|
||
| true | true | ||
| false |
|
||
| null | None |
Đầu tiên, bạn phải mở định dạng file JSON và phân giải các thông tin bên trong sang dạng tự điển Python trước khi bạn có thể thao tác các dữ liệu đó. Để thực hiện việc đó, bạn dùng phương thức json.load(). Sau khi bạn đã hoàn thành làm việc với từ điển đó, bạn có thể lưu lại các thay đổi vào trong một file. Lúc này bạn sẽ dùng phương thức json.dump(), quá trình này sẽ chuyển các dữ liệu vào lại file JSON.
Nếu bạn đọc kỹ đoạn mã trong ví dụ, bạn có thể nhận thấy là đoạn mã cốt lõi cùng giống như trong ví dụ YAML. Vòng lặp tạo ra để chương đi đến tất cả các vai trò và sẽ in kết quả ra. Trong cả hai trường hợp, dữ liệu sẽ được phân giải thành dạng từ điển sao cho bạn có thể làm việc với cùng kiểu dữ liệu Python.