Anàlisi JSON Python: una guia senzilla

Anàlisi JSON Python: una guia senzilla

JSON (significa 'JavaScript Object Notation') és un format basat en text que facilita l'intercanvi de dades entre diverses aplicacions. Per exemple, una aplicació escrit en C ++ funcionar a Windows pot intercanviar fàcilment dades JSON amb una aplicació escrita en python i executada a Linux. La seva simplicitat i flexibilitat ha conduït a un ús generalitzat en els darrers anys, especialment en preferència als formats anteriors basats en XML.





Hi ha biblioteques i jocs d'eines disponibles per analitzar i generar JSON des de gairebé qualsevol idioma i entorn. Aquest article es centra en mètodes i problemes derivats del processament de JSON mitjançant python.





Algunes mostres JSON

L'entitat JSON més comuna que us trobareu és una objecte : un conjunt d'assignacions valor-clau en el format que es mostra a continuació.





com cercar a Internet amb roku

person.json:

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

A continuació s’explica com podeu representar un conjunt d’objectes. En aquesta representació, cada element de la matriu és un objecte. A continuació es mostra una mostra dels salaris dels jugadors de beisbol.



salaries.json:

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

Per descomptat, també podeu representar una sèrie d’escalars. Es veu així:





[
'hello',
'world',
35
]

Analitzant JSON a Python

Python proporciona el fitxer json que es pot utilitzar tant per analitzar JSON, com per generar JSON a partir d'objectes i llistes de Python.

El següent fragment de codi mostra com obrir un fitxer JSON i carregar les dades en una variable.





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

Quan tingueu una cadena que contingui les dades JSON, podeu convertir-la en un objecte (o llista) python amb el següent:

L'explorador de fitxers de Windows 10 s'obre lentament
obj = json.loads('''{
'firstName': 'Alice',
'lastName': 'Hall',
'age': 35
}''')

Per analitzar un URL JSON, podeu crear un objecte URL mitjançant urllib2 i ús json.load () com abans.

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

Gestió d'errors

Quan el JSON tingui errors, obtindreu un ValueError . Podeu gestionar-lo i prendre mesures correctores si cal.

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

Analitzant JSON des de la línia d'ordres

De vegades, és útil analitzar JSON mitjançant la línia d'ordres de Python, potser per comprovar si hi ha errors o per obtenir una sortida molt ben dentada.

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 obtenir una sortida sagnada del fitxer JSON anterior, podeu fer el següent:

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'
}
}

I aquí és com podeu carregar l'objecte JSON a Python i extreure només el que necessiteu.

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

Accés a les dades

Un cop hàgiu carregat les dades JSON en una variable python, podeu accedir a les dades com ho faríeu amb qualsevol dictamen de Python (o llistar segons el cas). Per exemple, es pot accedir a les dades JSON anteriors de la manera següent:

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

Tipus de dades

Els tipus de dades es determinen automàticament a partir de les dades. Tingues en compte que edat s’analitza com un enter.

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

La taula de conversió següent s'utilitza per convertir de JSON a python.

Analitzant JSON mitjançant una classe personalitzada

Per defecte, un objecte JSON és analitzat en un pitó dict . De vegades és possible que tingueu la necessitat de crear automàticament un objecte de la vostra pròpia classe a partir de les dades JSON. Podeu fer-ho especificant un fitxer ganxo_objecte funció que gestiona la conversió. L'exemple següent mostra com.

Aquí hi ha una classe personalitzada que representa un 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)

Es crea una instància d'aquesta classe passant els arguments necessaris de la següent manera:

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

Per utilitzar aquesta classe per crear instàncies en analitzar JSON, necessiteu un fitxer ganxo_objecte funció definida de la següent manera: La funció rep un pitó dict i retorna un objecte de la classe correcta.

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

Ara podeu utilitzar-lo ganxo_objecte quan s'invoca l'analitzador 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}

Exemples d'ús de JSON

JSON és molt popular avui en dia. Molts llocs web i aplicacions SaaS (Software As A Service) ofereixen sortida JSON que les aplicacions poden consumir directament. Alguns dels disponibles públicament inclouen:

  • StackOverflow / StackExchange. Aquí teniu un URL que retorna una llista de preguntes en format JSON.
  • GitHub ofereix una API JSON a https://developer.github.com/v3/.
  • I aquí teniu l’API de Flickr: https://developer.yahoo.com/flickr/.

Si busqueu més exemples sobre com utilitzar-lo bé, consulteu aquesta guia a crear un bot de xarxes socials mitjançant Python .

descarregar vídeo de youtube al rotlle de la càmera

Feu servir JSON per consumir o proporcionar serveis? I esteu fent servir Python a la vostra pila de tecnologia? Expliqueu-ho als comentaris següents.

Compartir Compartir Tweet Correu electrònic Val la pena actualitzar-lo a Windows 11?

Windows s’ha redissenyat. Però, n’hi ha prou per convèncer-vos de canviar de Windows 10 a Windows 11?

Llegiu a continuació
Temes relacionats
  • Programació
  • Programació
  • Python
Sobre l'autor Jay Sridhar(17 articles publicats) Més de Jay Sridhar

Subscriu-te al nostre butlletí

Uniu-vos al nostre butlletí per obtenir consells tècnics, ressenyes, llibres electrònics gratuïts i ofertes exclusives.

Feu clic aquí per subscriure-us