Bài học theo mô-đun (1/4)
JSON: tuần tự hóa và phân tích cú pháp
JSON is the most widespread data exchange format. The json module in
the standard library handles it natively.
From Python to JSON: dumps
json.dumps(object) serializes a Python object into a JSON string.
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 sortedFrom JSON to Python: loads
json.loads(string) parses a JSON string and returns Python objects.
testo = '{"nome": "Ada", "anni": 36}'
d = json.loads(testo)
d["nome"] # 'Ada'
type(d) # <class 'dict'>Type mapping
| JSON | Python |
|---|---|
object | dict |
array | list |
string | str |
number | int / float |
true | True |
false | False |
null | None |
From file: 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)Without the trailing "s" they work on files (file-like), with the "s" on strings.
Non-serializable types: default
datetime, set, your custom classes are not serializable by default:
import datetime, json
json.dumps({"ora": datetime.datetime.now()})
# TypeError: Object of type datetime is not JSON serializableYou can pass a default function that tells how to transform them:
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)JSON and file operations
The standard library also provides json.dump() and json.load() (without the 's') to write and read JSON data directly to and from files, pairing naturally with context managers:
with open("data.json", "w") as f:
json.dump(data, f)Try it
Given `data = {'nome': 'Ada', 'anni': 36}`, serialize it to JSON with indent=2 and assign to the variable `json_str`. Evaluate `json_str`.
Hiển thị gợi ý
json.dumps(data, indent=2)
Giải pháp khả dụng sau 3 lần thử
Review exercise
Given the JSON string s = '[{"nome": "a", "v": 1}, {"nome": "b", "v": 2}]', parse it with json.loads into data and compute the sum of the 'v' values in total. Evaluate total.
Hiển thị gợi ý
json.loads returns a list of dicts.
Giải pháp khả dụng sau 3 lần thử
Additional challenge
Given the JSON string `json_data = '{"name": "Alice", "age": 30}'`, decode it into a Python dictionary using `json.loads`. Extract the value associated with the `'name'` key and store it in `user_name`. Finally, evaluate `user_name`.
Hiển thị gợi ý
Use json.loads(json_data) to decode, then access via data['name'].
Giải pháp khả dụng sau 3 lần thử