Bài học theo mô-đun (1/4)
JSON: tuần tự hóa và phân tích cú pháp
JSON là định dạng trao đổi dữ liệu phổ biến nhất. Mô-đun json trong
thư viện chuẩn xử lý nó một cách tự nhiên.
Từ Python sang JSON: dumps
json.dumps(object) tuần tự hóa một đối tượng Python thành chuỗi JSON.
import json
dati = {"nome": "Ada", "anni": 36, "skills": ["python", "matematica"]}
json.dumps(dati)
# '{"nome": "Ada", "anni": 36, "skills": ["python", "matematica"]}'
json.dumps(dati, indent=2, sort_keys=True)
# multi-line formatted string, keys sortedTừ JSON sang Python: loads
json.loads(string) phân tích chuỗi JSON và trả về các đối tượng Python.
testo = '{"nome": "Ada", "anni": 36}'
d = json.loads(testo)
d["nome"] # 'Ada'
type(d) # <class 'dict'>Kiểu ánh xạ
| JSON | Python |
|---|---|
object | dict |
array | list |
string | str |
number | int / float |
true | True |
false | False |
null | None |
Từ tệp: dump / load
with open("config.json", "w") as f:
json.dump(dati, f, indent=2)
with open("config.json") as f:
dati = json.load(f)Không có "s" ở cuối, chúng hoạt động trên các tệp (giống như tệp), với "s" trên chuỗi.
Các loại không thể tuần tự hóa: default
datetime, set, các lớp tùy chỉnh của bạn không thể tuần tự hóa theo mặc định:
import datetime, json
json.dumps({"ora": datetime.datetime.now()})
# TypeError: Object of type datetime is not JSON serializableBạn có thể truyền hàm default để biết cách chuyển đổi chúng:
def converti(obj):
if isinstance(obj, datetime.datetime):
return obj.isoformat()
if isinstance(obj, set):
return list(obj)
raise TypeError(f"non serializzabile: {type(obj)}")
json.dumps({"ora": datetime.datetime.now()}, default=converti)Hoạt động JSON và tệp
Thư viện tiêu chuẩn cũng cung cấp json.dump() và json.load() (không có 's') để ghi và đọc dữ liệu JSON trực tiếp đến và từ các tệp, ghép nối tự nhiên với trình quản lý ngữ cảnh:
with open("data.json", "w") as f:
json.dump(data, f)Hãy thử nó
Cho `data = {'nome': 'Ada', 'anni': 36}`, tuần tự hóa nó thành JSON với indent=2 và gán cho biến `json_str`. Đánh giá `json_str`.
Hiển thị gợi ý
json.dumps(dữ liệu, thụt lề=2)
Giải pháp khả dụng sau 3 lần thử
Xem lại bài tập
Cho chuỗi JSON s = '[{"nome": "a", "v": 1}, {"nome": "b", "v": 2}]', hãy phân tích cú pháp chuỗi đó bằng json.loads vào dữ liệu và tính tổng các giá trị 'v'. Đánh giá tổng thể.
Hiển thị gợi ý
json.loads trả về danh sách các ký tự.
Giải pháp khả dụng sau 3 lần thử
Thử thách bổ sung
Cho chuỗi JSON \`json_data = '{"name": "Alice", "age": 30}'\`, hãy giải mã chuỗi đó thành từ điển Python bằng cách sử dụng \`json.loads\`. Trích xuất giá trị được liên kết với khóa \`'name'\` và lưu trữ nó trong \`user_name\`. Cuối cùng, đánh giá \`user_name\`.
Hiển thị gợi ý
Sử dụng json.loads(json_data) để giải mã, sau đó truy cập qua data['name'].
Giải pháp khả dụng sau 3 lần thử