JSON(JavaScript Object Notation) è utilizzato dalla maggior parte degli sviluppatori per serializzare i dati specialmente nelle API. In questo tutorial andiamo a vedere come effettuare il parse di un JSON con python.
Libreria Json
La libreria json
ci semplifica di molto il parsing di un oggetto JSON, quindi andiamo subito ad importarla nel nostro script.
import json
Effettuare il Parse di una stringa Json
Puoi fare il parse di una stringa usando il metodo json.loads(stringa_json)
che deserializza i valori in un dizionario:
import json
json_string = '{"linguaggio": "python", "framework": "django"}'
json_dict = json.loads(json_string)
print(json_dict)
print(json_dict["linguaggio"])
#output
{'linguaggio': 'python', 'framework': 'django'}
python
Effettuare il parse di un file JSON
Un caso d'uso più frequente è quello di dover interagire con un file JSON invece che con delle stringhe.
Come prima cosa creiamo uno stream per poter accedere al file, dopodichè anche in questo caso possiamo utilizzare la libreria json
chiamando il metodo json.load()
in quanto si tratta di un file:
import json
with open("json_file.json", "r") as json_file:
data = json.load(json_file)
print(data)
Convertire un oggetto di python in una stringa JSON
è possibile convertire un oggetto in una stringa JSON usando il metodo json.dumps(python_object)
:
import json
python_dict = {'Nome': "Marco", "Anni": 36, "Lavoro": None, "Studente": False}
json_string = json.dumps(python_dict)
Ecco la lista degli oggetti che si possono castare in una stringa: dict, list, tuple, string, int, float, True, False, None
.
Scrivere del JSON in un file
Come nella lettura di un file, inizialmente creiamo uno stream in scrittura per accedere al file con cui vogliamo interagire, infine andiamo a chiamare il metodo json.dump(data)
per scrivere i dati sul file:
import json
data = {"Nome": "Matteo", "Anni": 15, "Lavoro": None, "Studente": True}
with open("result.json", "w") as json_file:
json.dump(data, json_file)
In questo caso, nel caso non esistesse già un file di nome "result.json"
nel percorso indicato, verrà creato un file con quel nome e al suo interno verrà scritto l'oggetto(in questo caso un dizionario) in formato JSON.
Effettuare il parse in un oggetto custom
Fino ad'ora abbiamo visto come fare il parse in un JSON in una stringa, oppure come leggere/scrivere in un file. Ma se volessimo castarlo in un oggetto custom? ecco un esempio banale per castare un JSON in una classe:
import json
class Persona(object):
def __init__(self, data):
self.__dict__ = json.loads(data)
persona_dict = {"Nome": "Luca", "Anni": 50, "Lavoro": True, "Studente": False}
json_data = json.dumps(persona_dict)
persona = Persona(json_data)
print(persona.Nome)