JSON Python-parsing: een eenvoudige handleiding

JSON Python-parsing: een eenvoudige handleiding

JSON (staat voor 'JavaScript Object Notation') is een op tekst gebaseerd formaat dat gegevensuitwisseling tussen diverse applicaties mogelijk maakt. Bijvoorbeeld een applicatie geschreven in C++ die op Windows draaien, kunnen eenvoudig JSON-gegevens uitwisselen met een applicatie die is geschreven in python en draait op Linux. De eenvoud en flexibiliteit hebben de afgelopen jaren geleid tot wijdverbreid gebruik, vooral in plaats van eerdere op XML gebaseerde formaten.





Er zijn bibliotheken en toolkits beschikbaar voor het ontleden en genereren van JSON vanuit bijna elke taal en omgeving. Dit artikel concentreert zich op methoden en problemen die voortvloeien uit het verwerken van JSON met python.





Enkele JSON-voorbeelden

De meest voorkomende JSON-entiteit die u tegenkomt is een object : een set sleutel/waarde-toewijzingen in de onderstaande indeling.





hoe verwijder ik een bedrijfspagina op facebook

persoon.json:

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

Hier ziet u hoe u een reeks objecten kunt weergeven. In deze weergave is elk item van de array een object. Het volgende is een voorbeeld van salarissen van honkbalspelers.



salarissen.json:

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

Natuurlijk kunt u ook een array van scalairen vertegenwoordigen. Het ziet er zo uit:





[
'hello',
'world',
35
]

JSON parseren in Python

Python biedt de json module die kan worden gebruikt om zowel JSON te ontleden als JSON te genereren uit python-objecten en lijsten.

Het volgende codefragment laat zien hoe u een JSON-bestand opent en de gegevens in een variabele laadt.





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

Als je een string hebt die de JSON-gegevens bevat, kun je deze converteren naar een python-object (of lijst) met het volgende:

hoe een foto op te blazen?
obj = json.loads('''{
'firstName': 'Alice',
'lastName': 'Hall',
'age': 35
}''')

Om een ​​JSON-URL te ontleden, kunt u een URL-object maken met urllib2 en gebruiken json.load() zoals eerder.

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

Fouten afhandelen

Als de JSON fouten bevat, krijgt u een WaardeFout . Je kunt het afhandelen en indien nodig corrigerend optreden.

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

JSON parseren vanaf de opdrachtregel

Soms is het handig om JSON te ontleden met behulp van de python-opdrachtregel, misschien om te controleren op fouten of om mooi ingesprongen uitvoer te verkrijgen.

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

Om ingesprongen uitvoer uit het bovenstaande JSON-bestand te verkrijgen, kunt u het volgende doen:

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

En hier leest u hoe u het JSON-object in python kunt laden en alleen kunt extraheren wat u nodig hebt.

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

Toegang tot de gegevens

Nadat u de JSON-gegevens in een python-variabele hebt geladen, hebt u toegang tot de gegevens zoals u zou doen met elke python-dict (of lijst, al naar gelang het geval). De bovenstaande JSON-gegevens zijn bijvoorbeeld als volgt toegankelijk:

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

Gegevenstypen

Gegevenstypes worden automatisch bepaald uit de gegevens. Let daar op leeftijd wordt geparseerd als een geheel getal.

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

De volgende conversietabel wordt gebruikt om van JSON naar python te converteren.

JSON parseren met een aangepaste klasse

Standaard is een JSON-object ontleed in een python dictaat . Soms heb je de behoefte om automatisch een object van je eigen klasse te maken op basis van de JSON-gegevens. U kunt dat doen door een object_hook functie die de conversie afhandelt. Het volgende voorbeeld laat zien hoe.

Hier is een aangepaste klasse die staat voor a Persoon .

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)

Een instantie van deze klasse wordt gemaakt door de vereiste argumenten als volgt door te geven:

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

Om deze klasse te gebruiken om instanties te maken bij het parseren van JSON, hebt u een object_hook functie als volgt gedefinieerd: De functie krijgt een python dictaat en retourneert een object van de juiste klasse.

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

Je kunt dit nu gebruiken object_hook functie bij het aanroepen van de JSON-parser.

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

Voorbeelden van JSON-gebruik

JSON is tegenwoordig enorm populair. Veel websites en SaaS-applicaties (Software As A Service) bieden JSON-output die direct door applicaties kan worden gebruikt. Enkele van de openbaar beschikbare zijn:

  • StackOverflow/StackExchange. Hier is een URL die een lijst met vragen in JSON-indeling retourneert.
  • GitHub biedt een JSON-api aan op https://developer.github.com/v3/.
  • En hier is de Flickr-API: https://developer.yahoo.com/flickr/.

Als je op zoek bent naar meer voorbeelden over hoe je het goed kunt gebruiken, bekijk dan deze gids voor: een sociale-mediabot bouwen met Python .

hoe 2 foto's samen te voegen op iphone

Gebruikt u JSON om services te consumeren of te leveren? En gebruik je python in je technologiestack? Leg het uit in de reacties hieronder.

Deel Deel Tweeten E-mail Is het de moeite waard om te upgraden naar Windows 11?

Windows is opnieuw ontworpen. Maar is dat genoeg om u te overtuigen om over te stappen van Windows 10 naar Windows 11?

Lees volgende
Gerelateerde onderwerpen
  • Programmeren
  • Programmeren
  • Python
Over de auteur Jay Sridhar(17 artikelen gepubliceerd) Meer van Jay Sridhar

Abonneer op onze nieuwsbrief

Word lid van onze nieuwsbrief voor technische tips, recensies, gratis e-boeken en exclusieve deals!

Klik hier om je te abonneren