Analiza JSON Python: un ghid simplu

Analiza JSON Python: un ghid simplu

JSON (înseamnă „JavaScript Object Notation”) este un format bazat pe text care facilitează schimbul de date între diverse aplicații. De exemplu, o aplicație scris în C ++ rularea pe Windows poate schimba cu ușurință date JSON cu o aplicație scrisă în python și care rulează pe Linux. Simplitatea și flexibilitatea sa au dus la o utilizare pe scară largă în ultimii ani, în special în favoarea formatelor anterioare bazate pe XML.





Există biblioteci și seturi de instrumente disponibile pentru analizarea și generarea JSON din aproape orice limbă și mediu. Acest articol se concentrează asupra metodelor și problemelor care decurg din procesarea JSON folosind python.





Unele mostre JSON

Cea mai comună entitate JSON pe care o veți întâlni este o obiect : un set de mapări cheie-valoare în formatul prezentat mai jos.





cine are cei mai mulți abonați pe youtube

person.json:

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

Iată cum puteți reprezenta o serie de obiecte. În această reprezentare, fiecare element al matricei este un obiect. Următorul este un eșantion de salarii ale jucătorilor de baseball.



salaries.json:

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

Desigur, puteți reprezenta și o serie de scalari. Arată așa:





[
'hello',
'world',
35
]

Analizarea JSON în Python

Python oferă json modul care poate fi folosit atât pentru a analiza JSON, cât și pentru a genera JSON din obiecte și liste Python.

Următorul fragment de cod arată cum se deschide un fișier JSON și se încarcă datele într-o variabilă.





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

Când aveți un șir care conține datele JSON, îl puteți converti într-un obiect python (sau listă) cu următoarele:

cum să activezi modul avion pe Mac
obj = json.loads('''{
'firstName': 'Alice',
'lastName': 'Hall',
'age': 35
}''')

Pentru a analiza un URL JSON, puteți crea un obiect URL folosind urllib2 si foloseste json.load () Ca înainte.

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

Tratarea erorilor

Când JSON are erori, veți obține un ValueError . Puteți să o gestionați și să luați măsuri corective, dacă este necesar.

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

Analizarea JSON din linia de comandă

Uneori, este util să analizați JSON folosind linia de comandă python, poate pentru a verifica erori sau pentru a obține o ieșire frumos indentată.

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

Pentru a obține o ieșire indentată din fișierul JSON de mai sus, puteți face următoarele:

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

Iată cum puteți încărca obiectul JSON în python și extrage doar ceea ce aveți nevoie.

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

Accesarea datelor

După ce ați încărcat datele JSON într-o variabilă python, puteți accesa datele așa cum ați face orice dicton python (sau lista, după caz). De exemplu, datele JSON de mai sus pot fi accesate după cum urmează:

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

Tipuri de date

Tipurile de date sunt determinate automat din date. Rețineți că vârstă este analizat ca un număr întreg.

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

Următorul tabel de conversie este utilizat pentru a converti de la JSON la python.

Analizarea JSON utilizând o clasă personalizată

În mod implicit, un obiect JSON este analizat într-un piton dict . Uneori este posibil să aveți nevoie să creați automat un obiect din propria clasă din datele JSON. Puteți face acest lucru specificând un object_hook funcție care gestionează conversia. Următorul exemplu arată cum.

Iată o clasă personalizată care reprezintă un Persoană .

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)

O instanță a acestei clase este creată prin trecerea argumentelor necesare după cum urmează:

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

Pentru a utiliza această clasă pentru a crea instanțe atunci când analizați JSON, aveți nevoie de un object_hook funcție definită după cum urmează: Funcția primește un python dict și returnează un obiect din clasa corectă.

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

Acum puteți utiliza acest lucru object_hook funcție la apelarea parserului 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}

Exemple de utilizare JSON

JSON este extrem de popular în zilele noastre. Multe site-uri web și aplicații SaaS (Software As A Service) oferă ieșire JSON care poate fi consumată direct de aplicații. Unele dintre cele disponibile publicului includ:

  • StackOverflow / StackExchange. Iată o adresă URL care returnează o listă de întrebări în format JSON.
  • GitHub oferă un API JSON la https://developer.github.com/v3/.
  • Și iată API-ul Flickr: https://developer.yahoo.com/flickr/.

Dacă sunteți în căutarea mai multor exemple despre cum să-l folosiți, consultați acest ghid construirea unui bot de social media folosind Python .

lista de solicitări de comandă pentru Windows 10

Folosiți JSON pentru a consuma sau a furniza servicii? Și folosiți python în stiva dvs. de tehnologie? Explicați în comentariile de mai jos.

Acțiune Acțiune Tweet E-mail Merită să faceți upgrade la Windows 11?

Windows a fost reproiectat. Dar este suficient pentru a vă convinge să treceți de la Windows 10 la Windows 11?

Citiți în continuare
Subiecte asemănătoare
  • Programare
  • Programare
  • Piton
Despre autor Jay Sridhar(17 articole publicate) Mai multe de la Jay Sridhar

Aboneaza-te la newsletter-ul nostru

Alăturați-vă newsletter-ului pentru sfaturi tehnice, recenzii, cărți electronice gratuite și oferte exclusive!

Faceți clic aici pentru a vă abona