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