Analisi JSON Python: una guida semplice

Analisi JSON Python: una guida semplice

JSON (acronimo di 'JavaScript Object Notation') è un formato basato su testo che facilita lo scambio di dati tra diverse applicazioni. Ad esempio, un'applicazione scritto in C++ in esecuzione su Windows può facilmente scambiare dati JSON con un'applicazione scritta in Python e in esecuzione su Linux. La sua semplicità e flessibilità ha portato a un uso diffuso negli ultimi anni, soprattutto in preferenza ai precedenti formati basati su XML.





Sono disponibili librerie e toolkit per l'analisi e la generazione di JSON da quasi tutti i linguaggi e gli ambienti. Questo articolo si concentra sui metodi e sui problemi derivanti dall'elaborazione di JSON utilizzando Python.





Alcuni campioni JSON

L'entità JSON più comune che incontrerai è an oggetto : un insieme di mappature chiave-valore nel formato mostrato di seguito.





dovresti lasciare il tuo laptop collegato tutto il tempo?

persona.json:

{
'firstName': 'Alice',
'lastName': 'Hall',
'age': 35
}

Ecco come puoi rappresentare un array di oggetti. In questa rappresentazione, ogni elemento dell'array è un oggetto. Quello che segue è un esempio degli stipendi dei giocatori di baseball.



stipendi.json:

[ {
'year' : 1985,
'teamId' : 'ATL',
'leagueId' : 'NL',
'playerId' : 'barkele01',
'salary' : 870000
}, {
'year' : 1985,
'teamId' : 'ATL',
'leagueId' : 'NL',
'playerId' : 'bedrost01',
'salary' : 550000
} ]

Naturalmente, puoi anche rappresentare una serie di scalari. Sembra così:





[
'hello',
'world',
35
]

Analizzare JSON in Python

Python fornisce il json modulo che può essere utilizzato sia per analizzare JSON, sia per generare JSON da oggetti ed elenchi Python.

Il seguente frammento di codice mostra come aprire un file JSON e caricare i dati in una variabile.





import json
with open('sample.json', 'r') as fp:
obj = json.load(fp)

Quando hai una stringa contenente i dati JSON, puoi convertirla in un oggetto python (o elenco) con quanto segue:

come aggiungere i pulsanti dei social media al canale youtube
obj = json.loads('''{
'firstName': 'Alice',
'lastName': 'Hall',
'age': 35
}''')

Per analizzare un URL JSON, puoi creare un oggetto URL usando urllib2 e usa json.load() come prima.

import urllib2, json
url = urllib2.urlopen('http://site.com/sample.json')
obj = json.load(url)

Errori di gestione

Quando il JSON ha errori, otterrai un ValoreErrore . Puoi gestirlo e intraprendere azioni correttive se necessario.

try:
obj = json.loads('''{
'firstName': 'Alice',
'lastName: 'Hall',
'age': 35
}''')
except ValueError:
print('error loading JSON')

Analisi di JSON dalla riga di comando

A volte, è utile analizzare JSON usando la riga di comando python, forse per verificare la presenza di errori o per ottenere un output ben rientrato.

cat glossary.json
# prints
{'glossary': {'GlossDiv': {'GlossList': {'GlossEntry': {'GlossDef': {'GlossSeeAlso': ['GML', 'XML'], 'para': 'A meta-markup language, used to create markup languages such as DocBook.'}, 'GlossSee': 'markup', 'Acronym': 'SGML', 'GlossTerm': 'Standard Generalized Markup Language', 'Abbrev': 'ISO 8879:1986', 'SortAs': 'SGML', 'ID': 'SGML'}}, 'title': 'S'}, 'title': 'example glossary'}}

Per ottenere l'output rientrato dal file JSON precedente, puoi effettuare le seguenti operazioni:

python -mjson.tool glossary.json
# prints
{
'glossary': {
'GlossDiv': {
'GlossList': {
'GlossEntry': {
'Abbrev': 'ISO 8879:1986',
'Acronym': 'SGML',
'GlossDef': {
'GlossSeeAlso': [
'GML',
'XML'
],
'para': 'A meta-markup language, used to create markup languages such as DocBook.'
},
'GlossSee': 'markup',
'GlossTerm': 'Standard Generalized Markup Language',
'ID': 'SGML',
'SortAs': 'SGML'
}
},
'title': 'S'
},
'title': 'example glossary'
}
}

Ed ecco come puoi caricare l'oggetto JSON in Python ed estrarre solo ciò di cui hai bisogno.

python -c 'import json; fp = open('glossary.json', 'r'); obj = json.load(fp); fp.close(); print(obj['glossary']['title']')
# prints
example glossary

Accesso ai dati

Dopo aver caricato i dati JSON in una variabile python, puoi accedere ai dati come faresti con qualsiasi dict python (o elenco a seconda dei casi). Ad esempio, è possibile accedere ai dati JSON di cui sopra come segue:

firstName = obj['firstName']
lastName = obj['Hall']
age = obj['age']

Tipi di dati

I tipi di dati vengono determinati automaticamente dai dati. Notare che età viene analizzato come un numero intero.

print(type(obj['firstName']), type(obj['lastName']), type(obj['age']))
# prints

La seguente tabella di conversione viene utilizzata per convertire da JSON a Python.

Analisi di JSON utilizzando una classe personalizzata

Per impostazione predefinita, un oggetto JSON è analizzato in un pitone detto . A volte potresti avere la necessità di creare automaticamente un oggetto della tua classe dai dati JSON. Puoi farlo specificando an object_hook funzione che gestisce la conversione. L'esempio seguente mostra come.

Ecco una classe personalizzata che rappresenta a Persona .

class Person:
def __init__(self, firstName, lastName, age):
self.firstName = firstName
self.lastName = lastName
self.age = age
def __str__(self):
return '{{'firstName' = '{0}','lastName' = '{1}', 'age' = {2}}}'.format(self.firstName, self.lastName, self.age)

Un'istanza di questa classe viene creata passando gli argomenti richiesti come segue:

person = Person('Crystal', 'Newell', 27)

Per utilizzare questa classe per creare istanze durante l'analisi di JSON, è necessario un object_hook funzione definita come segue: La funzione riceve un python detto e restituisce un oggetto della classe corretta.

def obj_creator(d):
return Person(d['firstName'], d['lastName'], d['age'])

Ora puoi usare questo object_hook funzione quando si richiama il parser JSON.

with open('sample.json', 'r') as fp:
obj = json.load(fp, object_hook = obj_creator)
print(obj)
# prints
{'firstName' = 'Alice','lastName' = 'Hall', 'age' = 35}

Esempi di utilizzo di JSON

JSON è estremamente popolare al giorno d'oggi. Molti siti Web e applicazioni SaaS (Software As A Service) offrono output JSON che può essere utilizzato direttamente dalle applicazioni. Alcuni di quelli disponibili pubblicamente includono:

  • StackOverflow/StackExchange. Ecco un URL che restituisce un elenco di domande in formato JSON.
  • GitHub offre un'API JSON su https://developer.github.com/v3/.
  • Ed ecco l'API di Flickr: https://developer.yahoo.com/flickr/.

Se stai cercando altri esempi su come farne buon uso, dai un'occhiata a questa guida per costruire un bot di social media usando Python .

come creare file iso windows 7

Stai utilizzando JSON per consumare o fornire servizi? E stai usando Python nel tuo stack tecnologico? Spiega nei commenti qui sotto.

Condividere Condividere Tweet E-mail Vale la pena eseguire l'aggiornamento a Windows 11?

Windows è stato ridisegnato. Ma è abbastanza per convincerti a passare da Windows 10 a Windows 11?

Leggi Avanti
Argomenti correlati
  • Programmazione
  • Programmazione
  • Pitone
Circa l'autore Jay Sridhar(17 Articoli Pubblicati) Altro da Jay Sridhar

Iscriviti alla nostra Newsletter

Iscriviti alla nostra newsletter per suggerimenti tecnici, recensioni, ebook gratuiti e offerte esclusive!

Clicca qui per iscriverti