Parsowanie JSON Python: prosty przewodnik

Parsowanie JSON Python: prosty przewodnik

JSON (skrót od „JavaScript Object Notation”) to format tekstowy, który ułatwia wymianę danych między różnymi aplikacjami. Na przykład aplikacja napisany w C++ działający w systemie Windows może łatwo wymieniać dane JSON z aplikacją napisaną w Pythonie i działającą w systemie Linux. Jego prostota i elastyczność doprowadziły w ostatnich latach do powszechnego użycia, zwłaszcza w stosunku do wcześniejszych formatów opartych na XML.





Dostępne są biblioteki i zestawy narzędzi do analizowania i generowania JSON z prawie każdego języka i środowiska. Ten artykuł koncentruje się na metodach i problemach wynikających z przetwarzania JSON przy użyciu języka Python.





Niektóre próbki JSON

Najczęstszą jednostką JSON, z którą się spotkasz, jest obiekt : zestaw mapowań klucz-wartość w formacie pokazanym poniżej.





utwórz ankietę na stronie na Facebooku

osoba.json:

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

Oto jak możesz reprezentować tablicę obiektów. W tej reprezentacji każdy element tablicy jest obiektem. Poniżej znajduje się próbka wynagrodzeń graczy w baseball.



wynagrodzenia.json:

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

Oczywiście możesz również reprezentować tablicę skalarów. To wygląda tak:





[
'hello',
'world',
35
]

Parsowanie JSON w Pythonie

Python zapewnia json moduł, który może służyć zarówno do parsowania JSON, jak i generowania JSON z obiektów i list Pythona.

Poniższy fragment kodu pokazuje, jak otworzyć plik JSON i załadować dane do zmiennej.





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

Gdy masz ciąg znaków zawierający dane JSON, możesz przekonwertować go na obiekt (lub listę) Pythona, wykonując następujące czynności:

jak grać w gry nes na wii
obj = json.loads('''{
'firstName': 'Alice',
'lastName': 'Hall',
'age': 35
}''')

Aby przeanalizować adres URL JSON, możesz utworzyć obiekt URL za pomocą urllib2 I użyć json.load() jak wcześniej.

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

Obsługa błędów

Gdy JSON zawiera błędy, otrzymasz Błąd wartości . Możesz sobie z tym poradzić i w razie potrzeby podjąć działania naprawcze.

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

Parsowanie JSON z wiersza poleceń

Czasami warto przeanalizować JSON za pomocą wiersza poleceń Pythona, być może w celu sprawdzenia błędów lub uzyskania ładnie wciętych danych wyjściowych.

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

Aby uzyskać wcięte dane wyjściowe z powyższego pliku JSON, możesz wykonać następujące czynności:

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 oto jak możesz załadować obiekt JSON do Pythona i wyodrębnić tylko to, czego potrzebujesz.

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

Dostęp do danych

Po załadowaniu danych JSON do zmiennej Pythona możesz uzyskać dostęp do danych tak, jak do każdego dyktatu Pythona (lub listy, w zależności od przypadku). Na przykład powyższe dane JSON można uzyskać w następujący sposób:

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

Typy danych

Typy danych są automatycznie określane na podstawie danych. Zauważ, że wiek jest analizowany jako liczba całkowita.

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

Poniższa tabela konwersji służy do konwersji z formatu JSON na Pythona.

Parsowanie JSON przy użyciu niestandardowej klasy

Domyślnie obiekt JSON to przetworzone w pytona dyktować . Czasami może zajść potrzeba automatycznego utworzenia obiektu własnej klasy z danych JSON. Możesz to zrobić, określając obiekt_hak funkcja obsługująca konwersję. Poniższy przykład pokazuje, jak.

Oto niestandardowa klasa reprezentująca 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)

Instancja tej klasy jest tworzona przez przekazanie wymaganych argumentów w następujący sposób:

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

Aby użyć tej klasy do tworzenia instancji podczas parsowania JSON, potrzebujesz obiekt_hak funkcja zdefiniowana w następujący sposób: Funkcja otrzymuje pytona dyktować i zwraca obiekt odpowiedniej klasy.

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

Możesz teraz użyć tego obiekt_hak funkcja podczas wywoływania parsera 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}

Przykłady użycia JSON

JSON jest obecnie niezwykle popularny. Wiele witryn internetowych i aplikacji SaaS (Software As A Service) oferuje dane wyjściowe JSON, które mogą być używane bezpośrednio przez aplikacje. Niektóre z publicznie dostępnych obejmują:

  • StackOverflow/StackExchange. Oto adres URL co zwraca listę pytań w formacie JSON.
  • GitHub oferuje interfejs API JSON pod adresem https://developer.github.com/v3/.
  • A oto API Flickr: https://developer.yahoo.com/flickr/.

Jeśli szukasz więcej przykładów, jak go dobrze wykorzystać, zapoznaj się z tym przewodnikiem, aby budowanie bota społecznościowego za pomocą Pythona .

przenoszenie programów z jednego dysku na drugi

Czy używasz JSON do konsumowania lub świadczenia usług? A czy używasz Pythona w swoim stosie technologicznym? Wyjaśnij w komentarzach poniżej.

Udział Udział Ćwierkać E-mail Czy warto uaktualnić do systemu Windows 11?

Windows został przeprojektowany. Ale czy to wystarczy, aby przekonać Cię do przejścia z Windows 10 na Windows 11?

Czytaj dalej
Powiązane tematy
  • Programowanie
  • Programowanie
  • Pyton
O autorze Jay Śridhar(17 opublikowanych artykułów) Więcej od Jaya Sridhar

Zapisz się do naszego newslettera

Dołącz do naszego newslettera, aby otrzymywać porady techniczne, recenzje, bezpłatne e-booki i ekskluzywne oferty!

Kliknij tutaj, aby zasubskrybować