Analýza JSON Python: Jednoduchý průvodce

Analýza JSON Python: Jednoduchý průvodce

JSON (zkratka pro 'JavaScript Object Notation') je textový formát, který usnadňuje výměnu dat mezi různými aplikacemi. Například aplikace napsáno v C ++ běžící na Windows si mohou snadno vyměňovat data JSON s aplikací napsanou v pythonu a běžící na Linuxu. Jeho jednoduchost a flexibilita vedly v posledních letech k rozšířenému používání, zejména v preferenci dřívějších formátů založených na XML.





K dispozici jsou knihovny a sady nástrojů pro analýzu a generování JSON z téměř jakéhokoli jazyka a prostředí. Tento článek se zaměřuje na metody a problémy vyplývající ze zpracování JSON pomocí pythonu.





Některé vzorky JSON

Nejběžnější entitou JSON, se kterou se setkáte, je objekt : sada mapování klíč – hodnota ve formátu uvedeném níže.





nelze se připojit k Windows Store Windows 10

person.json:

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

Zde je návod, jak můžete reprezentovat řadu objektů. V této reprezentaci je každá položka pole objektem. Následuje ukázka platů hráčů baseballu.



Salaries.json:

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

Samozřejmě můžete také představovat řadu skalárů. Vypadá to takto:





[
'hello',
'world',
35
]

Analýza JSON v Pythonu

Python poskytuje json modul, který lze použít k analýze JSON i generování JSON z objektů a seznamů pythonu.

Následující fragment kódu ukazuje, jak otevřít soubor JSON a načíst data do proměnné.





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

Když máte řetězec obsahující data JSON, můžete jej převést na objekt (nebo seznam) pythonu následujícím způsobem:

myš se pohybuje po vlastních oknech 10
obj = json.loads('''{
'firstName': 'Alice',
'lastName': 'Hall',
'age': 35
}''')

Chcete -li analyzovat adresu URL JSON, můžete vytvořit objekt adresy URL pomocí urllib2 a používat json.load () jako dříve.

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

Zpracování chyb

Když má JSON chyby, dostanete a ValueError . Můžete to zvládnout a v případě potřeby provést nápravná opatření.

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

Analýza JSON z příkazového řádku

Někdy je užitečné analyzovat JSON pomocí příkazového řádku pythonu, třeba zkontrolovat chyby nebo získat pěkně odsazený výstup.

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

Chcete -li získat odsazený výstup z výše uvedeného souboru JSON, můžete provést následující:

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

A tady je návod, jak můžete načíst objekt JSON do pythonu a extrahovat jen to, co potřebujete.

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

Přístup k datům

Jakmile načtete data JSON do proměnné pythonu, můžete k nim přistupovat stejným způsobem jako k jakémukoli diktátu pythonu (případně k seznamu). K výše uvedeným datům JSON lze například přistupovat následovně:

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

Typy dat

Datové typy jsou automaticky určeny z dat. Všimněte si, že stáří je analyzováno jako celé číslo.

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

K převodu z JSON na python slouží následující převodní tabulka.

Analýza JSON pomocí vlastní třídy

Ve výchozím nastavení je objekt JSON analyzovány do krajty diktovat . Někdy můžete mít potřebu automaticky vytvořit objekt vaší vlastní třídy z dat JSON. Můžete to udělat zadáním objektový háček funkce, která zpracovává převod. Následující příklad ukazuje, jak.

Zde je vlastní třída představující a Osoba .

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)

Instance této třídy se vytvoří předáním požadovaných argumentů následujícím způsobem:

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

Chcete -li použít tuto třídu k vytváření instancí při analýze JSON, potřebujete objektový háček funkce definovaná následovně: Funkce přijímá python diktovat a vrátí objekt správné třídy.

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

Nyní to můžete použít objektový háček funkce při vyvolání analyzátoru 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}

Příklady použití JSON

JSON je v dnešní době velmi populární. Mnoho webových stránek a aplikací SaaS (Software As A Service) nabízí výstup JSON, který mohou aplikace přímo spotřebovávat. Mezi ty veřejně dostupné patří:

  • StackOverflow/StackExchange. Zde je adresa URL který vrací seznam otázek ve formátu JSON.
  • GitHub nabízí JSON api na https://developer.github.com/v3/.
  • A tady je Flickr API: https://developer.yahoo.com/flickr/.

Pokud hledáte další příklady toho, jak ji dobře využít, podívejte se na tuto příručku vytváření bota sociálních médií pomocí Pythonu .

jak najít majitele mezinárodního telefonního čísla

Používáte JSON ke konzumaci nebo poskytování služeb? A používáte ve svém technologickém zásobníku python? Vysvětlete v níže uvedených komentářích.

Podíl Podíl tweet E-mailem Vyplatí se upgradovat na Windows 11?

Windows byl přepracován. Stačí to ale k tomu, abyste vás přesvědčili o přechodu z Windows 10 na Windows 11?

Číst dále
Související témata
  • Programování
  • Programování
  • Krajta
O autorovi Jay Sridhar(17 článků zveřejněno) Více od Jaye Sridhar

Přihlaste se k odběru našeho zpravodaje

Připojte se k našemu zpravodaji a získejte technické tipy, recenze, bezplatné elektronické knihy a exkluzivní nabídky!

Kliknutím sem se přihlásíte k odběru