JSON to skrót od JavaScript Object Notation. Jest nie tylko lekki, ale także łatwy do czytania i pisania dla ludzi. Podobnie, maszyny uważają go za łatwy do analizowania i generowania. Parsowanie JSON jest niezwykle ważne podczas pracy z danymi z interfejsów API, plików konfiguracyjnych lub innych źródeł przechowywanych informacji dla każdego programisty Pythona. Ten artykuł przeprowadzi Cię przez podstawowe procedury parsowania JSON przy użyciu modułu JSON Pythona.
JSON reprezentuje dane jako pary klucz-wartość, podobnie jak słownik Pythona. Oto podstawowy przykład obiektu JSON:
{
"name": "Alice",
"age": 30,
"is_student": false,
"courses": ["Math", "Science"]
}
Ten obiekt JSON zawiera ciąg znaków, liczbę, wartość logiczną i tablicę. Zrozumienie tej struktury ma fundamentalne znaczenie dla analizowania i manipulowania danymi JSON w Pythonie.
Moduł json Pythona ułatwia analizowanie ciągów i plików JSON. Moduł ten zawiera metody takie jak json.loads() do odczytu JSON z ciągu znaków oraz json.load() do odczytu JSON z pliku. I odwrotnie, json.dumps() i json.dump() służą do zapisywania JSON odpowiednio do łańcucha i pliku.
Istnieje kilka sposobów odczytu danych JSON, którym przyjrzymy się w następnej kolejności.
Aby odczytać dane JSON z ciągu znaków, należy użyć metody json.loads():
import json
json_string = '{"name": "Alice", "age": 30, "is_student": false, "courses": ["Math", "Science"]}'
data = json.loads(json_string)
print(data)
Wyjście:
Aby odczytać dane JSON z pliku, należy użyć metody json.load():
import json
with open('data.json', 'r') as file:
data = json.load(file)
print(data)
Wyjście:
Oto kilka różnych sposobów zapisu danych JSON:
Aby zapisać dane JSON do łańcucha, użyj metody json.dumps():
import json
data = {
"name": "Alice",
"age": 30,
"is_student": False,
"courses": ["Math", "Science"]
}
json_string = json.dumps(data)
print(json_string)
Wyjście:
Aby zapisać dane JSON do pliku, użyj metody json.dump():
import json
data = {
"name": "Alice",
"age": 30,
"is_student": False,
"courses": ["Math", "Science"]
}
with open('data.json', 'w') as file:
json.dump(data, file)
Zagnieżdżone obiekty JSON są powszechne podczas pracy z bardziej złożonymi strukturami danych. Python może z łatwością obsługiwać te zagnieżdżone struktury.
import json
nested_json_string = '''
{
"name": "Alice",
"age": 30,
"is_student": false,
"courses": ["Math", "Science"],
"address": {
"street": "123 Main St",
"city": "Wonderland"
}
}
'''
data = json.loads(nested_json_string)
print(data['address']['city'])
Wyjście:
Czasami trzeba przekonwertować niestandardowe obiekty Pythona na JSON. Wymaga to niestandardowego kodera.
import json
class Student:
def __init__(self, name, age, is_student):
self.name = name
self.age = age
self.is_student = is_student
class StudentEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, Student):
return obj.__dict__
return super().default(obj)
student = Student("Alice", 30, False)
json_string = json.dumps(student, cls=StudentEncoder)
print(json_string)
Wyjście:
Podobnie, aby zdekodować dane JSON do niestandardowych obiektów Pythona, potrzebny jest niestandardowy dekoder.
import json
class Student:
def __init__(self, name, age, is_student):
self.name = name
self.age = age
self.is_student = is_student
def student_decoder(dct):
return Student(dct['name'], dct['age'], dct['is_student'])
json_string = '{"name": "Alice", "age": 30, "is_student": false}'
student = json.loads(json_string, object_hook=student_decoder)
print(student.name)
Wyjście:
Praca z danymi JSON może prowadzić do kilku typowych błędów, szczególnie podczas analizowania, generowania lub uzyskiwania dostępu do danych JSON. Oto niektóre z najczęstszych z nich:
Częstym błędem podczas parsowania JSON jest napotkanie nieprawidłowego formatu JSON. JSON wymaga podwójnych cudzysłowów wokół kluczy i wartości łańcuchowych oraz prawidłowego zagnieżdżenia nawiasów i nawiasów klamrowych.
import json
invalid_json_string = "{'name': 'Alice', 'age': 30, 'is_student': False}"
try:
data = json.loads(invalid_json_string)
except json.JSONDecodeError as e:
print(f"Invalid JSON format: {e}")
Wyjście:
Podczas analizowania danych JSON można napotkać brakujące klucze. Użyj metody get, aby podać wartość domyślną, jeśli brakuje klucza.
import json
json_string = '{"name": "Alice", "age": 30}'
data = json.loads(json_string)
is_student = data.get('is_student', False)
print(is_student)import json
json_string = '{"name": "Alice", "age": 30}'
data = json.loads(json_string)
is_student = data.get('is_student', False)
print(is_student)
Użyj modułu pdb, aby ustawić punkty przerwania i debugować kod parsowania JSON.
import json
import pdb
json_string = '{"name": "Alice", "age": 30, "is_student": false}'
pdb.set_trace()
data = json.loads(json_string)
print(data)
Web scraping często obejmuje wyodrębnianie danych z internetowych interfejsów API, które zwracają odpowiedzi JSON. Oto kompaktowy przykład wykorzystujący bibliotekę requests i punkt końcowy https://httpbin.org/anything.
Najpierw upewnij się, że masz zainstalowaną bibliotekę requests:
pip install requests
Ten kod importuje żądania dla żądań HTTP i json do obsługi danych JSON. Wysyła żądanie GET do docelowego adresu URL za pomocą requests.get(url) i analizuje odpowiedź JSON za pomocą response.json(), przekształcając ją w słownik Pythona. Wyciągamy i drukujemy określone dane, takie jak nagłówki, agent użytkownika, pochodzenie i adres URL.
Kod zawiera silną obsługę błędów; przechwytuje json.JSONDecodeError, gdy wystąpi błąd dekodowania JSON, oraz KeyError, gdy określony klucz jest nieobecny, co w konsekwencji zabezpiecza program przed awariami "braku danych". Taka solidność kodu pozwala zatem doskonale radzić sobie z rzeczywistymi zadaniami skrobania stron internetowych.
import requests
import json
url = 'https://httpbin.org/anything'
response = requests.get(url)
try:
data = response.json()
# Wyodrębnianie określonych danych z odpowiedzi JSON
headers = data['headers']
user_agent = headers.get('User-Agent', 'N/A')
origin = data.get('origin', 'N/A')
url = data.get('url', 'N/A')
print(f"User Agent: {user_agent}")
print(f"Origin: {origin}")
print(f"URL: {url}")
except json.JSONDecodeError:
print("Error decoding JSON response")
except KeyError as e:
print(f"Key error: {e} not found in the JSON response")
Każdy programista Pythona musi wiedzieć, jak analizować JSON. Dzięki modułowi JSON i najlepszemu sposobowi jego wykonania, który został przedstawiony w tym podręczniku, będziesz w stanie odczytywać, zapisywać i debugować dane JSON wystarczająco szybko. Oznacza to, że będziesz regularnie testować swoje kody i korzystać z odpowiednich narzędzi i najbardziej aktualnych funkcji dostępnych w Pythonie, aby uzyskać lepsze umiejętności obsługi JSON.
Podczas przeprowadzania web scrapingu, parsowanie JSON jest bardzo ważne, biorąc pod uwagę fakt, że dane pobierane z internetowych interfejsów API zwykle pojawiają się w formie JSON. Poza tym, możesz skutecznie wydobywać informacje z różnych źródeł internetowych, jeśli potrafisz parsować i manipulować danymi JSON w dobry sposób.
Komentarze: 0