JSON Python Parsing Een eenvoudige handleiding

JSON Python Parsing Een eenvoudige handleiding / Programming

JSON (staat voor “JavaScript-objectnotatie”) is een op tekst gebaseerd formaat dat gegevensuitwisseling tussen verschillende toepassingen vergemakkelijkt. Bijvoorbeeld, een toepassing geschreven in C ++ Hoe Windows Visual C ++ Runtime Errors Fix Fix Windows Visual C ++ Runtime fouten Fix Visual C ++ Fouten zijn een veelvoorkomend probleem voor Windows-gebruikers. Maar weet je hoe je ze kunt repareren? Meer lezen onder Windows kan gemakkelijk JSON-gegevens uitwisselen met een toepassing die is geschreven in python en wordt uitgevoerd onder Linux. De eenvoud en flexibiliteit heeft de afgelopen jaren tot wijdverbreid gebruik geleid, met name in plaats van eerdere XML-gebaseerde indelingen.

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

Sommige JSON-voorbeelden

De meest voorkomende JSON-entiteit die u tegenkomt, is een voorwerp: een set sleutel / waarde-toewijzingen in het onderstaande formaat.

person.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.

salaries.json:

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

Je kunt natuurlijk ook een reeks scalar's weergeven. Het ziet er zo uit:

["hallo", "wereld", 35] 

Parsing JSON in Python

Python Python en JavaScript laten communiceren via JSON Python en JavaScript laten Communiceren met JSON Vandaag laat ik u zien hoe u JSON gebruikt om gegevens van JavaScript naar Python te verzenden. Ik zal bespreken hoe je een webserver installeert, samen met alle code die je nodig hebt. Meer lezen biedt het json module die kan worden gebruikt om zowel JSON te analyseren, als om JSON te genereren van python-objecten en lijsten.

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

import json met open ('sample.json', 'r') als fp: obj = json.load (fp) 

Wanneer u een tekenreeks hebt die de JSON-gegevens bevat, kunt u deze naar een python-object (of lijst) converteren met het volgende:

obj = json.loads ("" "" firstName ":" Alice "," lastName ":" Hall "," age ": 35" "") 

Als u een JSON-URL wilt parseren, kunt u een URL-object maken met behulp van urllib2 en gebruiken json.load () zoals eerder.

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

Omgaan met fouten

Wanneer de JSON fouten heeft, krijgt u een ValueError. Je kunt het aan en neem indien nodig corrigerende maatregelen.

probeer: obj = json.loads ("" "" firstName ":" Alice "," lastName: "Hall", "age": 35 "" ") except ValueError: print" error loading JSON "

Parsing JSON vanaf de commandoregel

Soms is het nuttig om JSON te analyseren met behulp van de opdrachtregel van python, misschien om te controleren op fouten of om keurig ingesprongen uitvoer te verkrijgen.

cat glossary.json # prints "glossary": "GlossDiv": "GlossList": "GlossEntry": "GlossDef": "GlossSeeAlso": ["GML", "XML"], "para": "Een meta-markup-taal, gebruikt om markup-talen zoals DocBook te maken.", "GlossSee": "markup", "Acronym": "SGML", "GlossTerm": "Standard Generalized Markup Language", "Abbrev": "ISO 8879: 1986", "SortAs": "SGML", "ID": "SGML", "titel": "S", "titel": "voorbeeldwoordenlijst" 

Om ingesprongen uitvoer van 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": "Een meta-markup-taal, gebruikt om markup-talen zoals DocBook te maken." , "GlossSee": "markup", "GlossTerm": "Standard Generalized Markup Language", "ID": "SGML", "SortAs": "SGML", "title": "S", "title ":" voorbeeld woordenlijst " 

En hier is hoe u het JSON-object in Python kunt laden en alleen datgene 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"] '# print voorbeeld verklarende woordenlijst

Toegang tot de gegevens

Nadat u de JSON-gegevens in een pythonvariabele hebt geladen, hebt u toegang tot de gegevens zoals u elke willekeurige Python-dictaat zou doen (of een lijst naargelang het geval). De bovenstaande JSON-gegevens zijn bijvoorbeeld als volgt toegankelijk:

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

Datatypes

Datatypen worden automatisch bepaald op basis van 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.

Parsing JSON met behulp van een aangepaste klasse

Standaard wordt een JSON-object in een python geparseerd dict. Soms hebt u misschien de behoefte om automatisch een object van uw 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 a vertegenwoordigt 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 exemplaar van deze klasse wordt gemaakt door de vereiste argumenten als volgt door te geven:

persoon = persoon ("Crystal", "Newell", 27) 

Als u deze klasse wilt gebruiken om instanties te maken bij het parseren van JSON, hebt u een object_hook functie als volgt gedefinieerd: De functie ontvangt een python dict 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.

met open ('sample.json', 'r') als fp: obj = json.load (fp, object_hook = obj_creator) print obj # prints "firstName" = "Alice", "lastName" = "Hall", " leeftijd "= 35 

Voorbeelden van JSON-gebruik

JSON is tegenwoordig erg populair. Veel websites en SaaS-applicaties (Software As A Service) bieden JSON-uitvoer die rechtstreeks door applicaties kan worden gebruikt. Sommige van de openbaar beschikbare zijn onder meer:

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

Gebruikt u JSON om te consumeren of diensten te verlenen? En gebruik je python in je technologiestack? Leg het uit in de opmerkingen hieronder.

Ontdek meer over: Programmeren, Python.