Lecții din modul (1/4)
JSON: serializați și analizați
JSON este cel mai răspândit format de schimb de date. Modulul json în
biblioteca standard o gestionează nativ.
De la Python la JSON: dumps
json.dumps(object) serializează un obiect Python într-un șir 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 sortedDe la JSON la Python: loads
json.loads(string) analizează un șir JSON și returnează obiecte Python.
testo = '{"nome": "Ada", "anni": 36}'
d = json.loads(testo)
d["nome"] # 'Ada'
type(d) # <class 'dict'>Maparea tipului
| JSON | Python |
|---|---|
object | dict |
array | list |
string | str |
number | int / float |
true | True |
false | False |
null | None |
Din fișier: 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)Fără „s” de sfârșit, acestea funcționează pe fișiere (asemănătoare fișierelor), cu „s” pe șiruri.
Tipuri neserializabile: default
datetime, set, clasele dvs. personalizate nu sunt serializabile în mod implicit:
import datetime, json
json.dumps({"ora": datetime.datetime.now()})
# TypeError: Object of type datetime is not JSON serializablePuteți trece o funcție default care vă spune cum să le transformați:
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 și operațiuni cu fișiere
Biblioteca standard oferă, de asemenea, json.dump() și json.load() (fără „s”) pentru a scrie și a citi date JSON direct în și din fișiere, asociindu-se în mod natural cu managerii de context:
with open("data.json", "w") as f:
json.dump(data, f)Încearcă
Având în vedere `data = {'nome': 'Ada', 'anni': 36}`, serializați-l la JSON cu indent=2 și atribuiți variabilei `json_str`. Evaluați `json_str`.
Afișează indiciu
json.dumps(date, indent=2)
Soluție disponibilă după 3 încercări
Exercițiu de revizuire
Având în vedere șirul JSON s = '[{"nome": "a", "v": 1}, {"nome": "b", "v": 2}]', analizați-l cu json.loads în date și calculați suma valorilor „v” în total. Evaluați totalul.
Afișează indiciu
json.loads returnează o listă de dict.
Soluție disponibilă după 3 încercări
Provocare suplimentară
Având în vedere șirul JSON \`json_data = '{"name": "Alice", "age": 30}'\`, decodați-l într-un dicționar Python folosind \`json.loads\`. Extrageți valoarea asociată cheii \`'name'\` și stocați-o în \`user_name\`. În cele din urmă, evaluați \`nume_utilizator\`.
Afișează indiciu
Utilizați json.loads(json_data) pentru a decoda, apoi accesați prin data['name'].
Soluție disponibilă după 3 încercări