JSON
La serialització i la deserialització JSON són els processos de conversió de dades JSON a i des d’altres formats, com ara objectes o strings de Python, per transmetre o emmagatzemar les dades.
A continuació tens un exemple em que serialitzem un objecte Python a un string JSON.
Crea el fitxer data.py
:
import json
data = { "email": None, "name": "John Doe", "age": 42.5, "married": True, "children": ["Alice", "Bob"],}
text = json.dumps(data, indent=4, sort_keys=True)
print(text)
Executem el fitxer:
$ python3 data.py{ "age": 42.5, "children": [ "Alice", "Bob" ], "email": null, "married": true, "name": "John Doe"}
Pots veure que el resultat és un string de Python formatejat segons les regles gramaticals de JSON.
Funcions comunes
Section titled “Funcions comunes”A continuació es mostrens algunes funcions comunes de la llibreria json que s’utilitzen per a la serialització i la deserialització.
json.dumps()
Section titled “json.dumps()”Aquesta funció s’utilitza per serialitzar un objecte Python en una string JSON.
La funció dumps()
pren un sol argument, l’objecte Python, i retorna una string JSON.
Aquí tens un exemple: import json
# Python object to JSON stringpython_obj = {'name': 'John', 'age': 30}
json_string = json.dumps(python_obj)print(json_string)
# output: {"name": "John", "age": 30}
json.loads()
Section titled “json.loads()”Aquesta funció s’utilitza per un “parse” d’un srting JSON en un objecte Python.
La funció loads()
pren un sol argument, el string JSON, i retorna un objecte Python.
Aquí tens un exemple:
import json
# JSON string to Python objectjson_string = '{"name": "John", "age": 30}'
python_obj = json.loads(json_string)
print(python_obj)
# output: {'name': 'John', 'age': 30}
json.dump()
Section titled “json.dump()”Aquesta funció s’utilitza per serialitzar un objecte Python i escriure’l en un fitxer JSON.
La funció dump()
pren dos arguments, l’objecte Python i l’objecte fitxer.
Aquí tens un exemple:
import json# serialize Python object and write to JSON filepython_obj = {'name': 'John', 'age': 30}with open('data.json', 'w') as file: json.dump(python_obj, file)
json.load()
Section titled “json.load()”Aquesta funció s’utilitza per llegir un fitxer JSON i analitzar-ne el contingut en un objecte Python.
La funció load() pren un sol argument, l’objecte fitxer, i retorna un objecte Python.
Aquí tens un exemple:
import json
# read JSON file and parse contentswith open('data.json', 'r') as file: python_obj = json.load(file)print(python_obj)
# output: {'name': 'John', 'age': 30}
A continuació tens un codi que utilitza les llibreries requests i json per fer una sol·licitud a l’AEMET i recuperar dades:
import requestsimport json
municipio = "08019"
key = "eyJhbGciOiJIUzI1NiJ9..." # Utlitza la teva API Keyurl = f"https://opendata.aemet.es/opendata/api/prediccion/especifica/municipio/diaria/{municipio}/?api_key={key}"
response = requests.get(url)
if response.status_code == 200: data = json.loads(response.text) print(data["datos"])else: print(f"Error retrieving data, status code: {response.status_code}")
-
La línia
requests.get(url)
fa la sol·licitud real i emmagatzema la resposta a la variableresponse
. -
La línia
if response.status_code == 200:
comprova si el codi de resposta és 200, la qual cosa significa que la sol·licitud ha tingut èxit. -
Si la sol·licitud té èxit, el codi carrega el text de resposta en un diccionari de Python mitjançant el mètode
json.loads()
i l’emmagatzema a la variabledata
.
Si executes el codi tens la URL on estan les dades meteorològiques:
$ python3 aemet.pyhttps://opendata.aemet.es/opendata/sh/a5a38371
Modifica el codi perquè consulti "datos"
i torni la probabilitat de precipitació:
{% sol %}
import requestsimport json
municipio = "08019"
key = "eyJhbGciOiJIUzI1NiJ9..."url = f"https://opendata.aemet.es/opendata/api/prediccion/especifica/municipio/diaria/{municipio}/?api_key={key}"
response = requests.get(url)
if response.status_code == 200: data = json.loads(response.text) datos = data["datos"]else: print(f"Error retrieving data, status code: {response.status_code}") exit
response = requests.get(datos)
if response.status_code == 200: data = json.loads(response.text) data = data[0]["prediccion"]["dia"][0]["probPrecipitacion"] print(json.dumps(data, indent=4))else: print(f"Error retrieving data, status code: {response.status_code}") exit
Resultat:
[ { "value": 0, "periodo": "00-24" }, ...]
{% endsol %}
El contingut d'aquest lloc web té llicència CC BY-NC-ND 4.0.
©2022-2025 xtec.dev