Parsowanie Pythona JSON: serializacja i deserializacja

Dowiedz się, jak czytać, pisać i analizować dane JSON w języku Python. Opanuj json.loads, json.dumps i dostosuj kodery/dekodery JSON.

Spróbuj w Edytorze

Przegląd

JSON (JavaScript Object Notation) to lekki format wymiany danych, który dominuje w nowoczesnych internetowych interfejsach API, konfiguracjach i ładunkach baz danych. Ponieważ struktury JSON przypominają słowniki i listy Pythona, tłumaczenie między nimi jest niezwykle płynne. Python jest wyposażony we wbudowany moduł `json`, który ułatwia analizowanie ciągów JSON na obiekty Pythona i konwertowanie obiektów Pythona z powrotem na ciągi JSON.

Proces tłumaczenia obiektu Pythona (takiego jak słownik) na surowy ciąg znaków JSON nazywa się serializacją lub kodowaniem. Jest to obsługiwane przez `json.dumps()` (dla ciągów znaków) i `json.dump()` (do zapisu bezpośrednio do pliku). Możesz kontrolować parametry formatowania, takie jak „wcięcie”, aby upiększyć JSON lub „klucze_sortowania”, aby zachować alfabetyczną kolejność atrybutów. I odwrotnie, parsowanie ciągu JSON do słownika Pythona nazywa się deserializacją i jest wykonywane za pomocą funkcji `json.loads()` i `json.load()`.

Podczas gdy standardowe typy języka Python, takie jak ciągi znaków, liczby, listy i słowniki, serializują się automatycznie do formatu JSON, obiekty niestandardowe (takie jak klasy lub obiekty typu datetime) tego nie robią. Próba bezpośredniego zakodowania obiektu niestandardowego zgłosi błąd „TypeError”. Aby temu zaradzić, programiści muszą utworzyć niestandardową klasę kodera, która dziedziczy po `json.JSONEncoder` i zastąpić metodę `.default()`, aby serializować klasy do czytelnych słowników. Opanowanie manipulacji JSON jest kluczem do komunikacji z zewnętrznymi usługami internetowymi.

Dane wyjściowe kodu i wykonania

Konwertowanie słownika na ciąg JSON i ponowne jego analizowanie przy użyciu wbudowanej biblioteki json.

import json

# Python Dictionary representing a user profile
user_profile = {
    "name": "Alex",
    "is_premium": True,
    "skills": ["Python", "Docker"],
    "age": 28
}

# Serialize dictionary to JSON string
json_string = json.dumps(user_profile, indent=2)
print("--- JSON String ---")
print(json_string)

# Deserialize JSON string back to dictionary
parsed_dict = json.loads(json_string)
print("\n--- Parsed Python Dictionary ---")
print(f"Name: {parsed_dict['name']}")
print(f"First Skill: {parsed_dict['skills'][0]}")
Wyjście terminala
--- JSON String ---
{
  "name": "Alex",
  "is_premium": true,
  "skills": [
    "Python",
    "Docker"
  ],
  "age": 28
}

--- Parsed Python Dictionary ---
Name: Alex
First Skill: Python

Wdrażanie krok po kroku

  • Wysyłanie ładunków i odczytywanie danych z interfejsów API REST
  • Przechowywanie preferencji konfiguracyjnych w plikach settings.json
  • Przekazywanie uporządkowanych ładunków między mikrousługami

Często zadawane pytania

Jaka jest różnica między json.dump i json.dumps?

json.dump (bez „s”) zapisuje dane JSON bezpośrednio do strumienia pliku. json.dumps (z „s”) serializuje dane do zmiennej łańcuchowej Pythona.

Jak radzisz sobie z błędami dekodowania JSON?

Zawiń kod analizujący w blok try/except przechwytujący „json.JSONDecodeError”, aby sprawnie obsługiwać zniekształcone ciągi JSON.

Powiązane tematy

Polecane zasoby Pythona

Poszerzaj swoją wiedzę dzięki powiązanym interaktywnym samouczkom, ściągawkom i porównaniom kodów.