JSON Python Parsing: Jednoduchý sprievodca

JSON Python Parsing: Jednoduchý sprievodca

JSON (skratka pre „JavaScript Object Notation“) je textový formát, ktorý uľahčuje výmenu údajov medzi rôznymi aplikáciami. Napríklad aplikácia napísané v C ++ v systéme Windows si môžete ľahko vymieňať údaje JSON s aplikáciou napísanou v pythone a spustenou v systéme Linux. Jeho jednoduchosť a flexibilita viedla v posledných rokoch k rozsiahlemu používaniu, a to najmä prednosť pred staršími formátmi založenými na XML.





K dispozícii sú knižnice a sady nástrojov na analýzu a generovanie formátu JSON z takmer akéhokoľvek jazyka a prostredia. Tento článok sa zameriava na metódy a problémy vyplývajúce zo spracovania JSON pomocou pythonu.





Niektoré vzorky JSON

Najbežnejšou entitou JSON, s ktorou sa stretnete, je predmet : sada mapovaní kľúč-hodnota vo formáte uvedenom nižšie.





záložka alt nefunguje Windows 7

person.json:

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

Tu je návod, ako môžete reprezentovať množstvo predmetov. V tomto znázornení je každá položka poľa objektom. Nasleduje ukážka platov hráčov bejzbalu.



Salaries.json:

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

Samozrejme, môžete predstavovať aj rad skalárov. Vyzerá to takto:





[
'hello',
'world',
35
]

Analýza JSON v Pythone

Python poskytuje súbor json modul, ktorý je možné použiť na analýzu JSON, ako aj na generovanie JSON z objektov a zoznamov pythonu.

Nasledujúci útržok kódu ukazuje, ako otvoriť súbor JSON a načítať údaje do premennej.





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

Keď máte reťazec obsahujúci údaje JSON, môžete ho previesť na objekt (alebo zoznam) pythonu nasledujúcim spôsobom:

najlepší softvér na nahrávanie obrazovky pre mac
obj = json.loads('''{
'firstName': 'Alice',
'lastName': 'Hall',
'age': 35
}''')

Ak chcete analyzovať adresu URL JSON, môžete vytvoriť objekt adresy URL pomocou urllib2 a používať json.load () ako predtým.

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

Riešenie chýb

Keď má JSON chyby, dostanete a ValueError . Môžete to zvládnuť a v prípade potreby vykonať nápravné opatrenia.

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

Analýza JSON z príkazového riadka

Niekedy je užitočné analyzovať JSON pomocou príkazového riadka python, možno skontrolovať chyby alebo získať pekne odsadený 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'}}

Ak chcete získať odsadený výstup z vyššie uvedeného súboru JSON, môžete urobiť nasledovné:

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 tu je návod, ako môžete načítať objekt JSON do pythonu a extrahovať iba to, čo potrebujete.

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

Prístup k údajom

Keď načítate údaje JSON do premennej python, môžete k nim pristupovať rovnako ako k akémukoľvek diktátu pythonu (alebo prípadne k zoznamu). K vyššie uvedeným údajom JSON je napríklad možné pristupovať nasledovne:

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

Dátové typy

Dátové typy sa automaticky určujú z údajov. Poznač si to Vek je analyzované ako celé číslo.

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

Nasledujúca prevodná tabuľka sa používa na konverziu z JSON na python.

Analýza JSON pomocou vlastnej triedy

Objekt JSON je štandardne analyzované na pytóna dikt . Niekedy môžete mať potrebu automaticky vytvoriť objekt vlastnej triedy z údajov JSON. Môžete to urobiť zadaním object_hook funkcia, ktorá sa stará o prevod. Nasledujúci príklad ukazuje ako.

Tu je vlastná trieda predstavujúca 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)

Inštancia tejto triedy je vytvorená odovzdaním požadovaných argumentov nasledovne:

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

Ak chcete použiť túto triedu na vytváranie inštancií pri analýze JSON, potrebujete object_hook funkcia definovaná nasledovne: Funkcia prijíma python dikt a vráti predmet správnej triedy.

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

Teraz to môžete použiť object_hook funkcia pri vyvolaní syntaktického analyzátora 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}

Príklady použitia JSON

JSON je v dnešnej dobe veľmi populárny. Mnoho webových stránok a aplikácií SaaS (Software As A Service) ponúka výstup JSON, ktorý môžu aplikácie priamo spotrebovávať. K niektorým z verejne dostupných patrí:

  • StackOverflow/StackExchange. Tu je adresa URL ktorý vráti zoznam otázok vo formáte JSON.
  • GitHub ponúka JSON api na https://developer.github.com/v3/.
  • A tu je Flickr API: https://developer.yahoo.com/flickr/.

Ak hľadáte ďalšie príklady toho, ako ho dobre využiť, prečítajte si tohto sprievodcu vytváranie robota sociálnych médií pomocou Pythonu .

ako zmeniť kanál instagramu na najnovší

Používate JSON na konzumáciu alebo poskytovanie služieb? A používate vo svojom technologickom balíku python? Vysvetlite v nižšie uvedených komentároch.

zdieľam zdieľam Tweet E -mail Oplatí sa upgradovať na Windows 11?

Windows bol prepracovaný. Stačí to však na to, aby ste sa presvedčili o prechode z Windows 10 na Windows 11?

Čítajte ďalej
Súvisiace témy
  • Programovanie
  • Programovanie
  • Python
O autorovi Jay Sridhar(17 článkov uverejnených) Viac od Jaya Sridhara

prihlásiť sa ku odberu noviniek

Pripojte sa k nášmu bulletinu a získajte technické tipy, recenzie, bezplatné elektronické knihy a exkluzívne ponuky!

Kliknutím sem sa prihlásite na odber