Jak czytać i analizować plik JSON w Pythonie

Dowiedz się, jak czytać, analizować i ładować pliki JSON w Pythonie, korzystając z wbudowanego modułu json. Opanuj konwersję ciągów JSON na słowniki i odwrotnie.

Wypróbuj to rozwiązanie w Edytorze

Przegląd

JSON (JavaScript Object Notation) to najpopularniejszy format danych dla interfejsów API, plików konfiguracyjnych i przechowywania danych. Python ma wbudowany moduł `json`, który sprawia, że ​​odczytywanie, analizowanie i zapisywanie danych JSON jest niezwykle proste. Ponieważ obiekty JSON są doskonale odwzorowane na słowniki Pythona, a tablice JSON są mapowane na listy w Pythonie, praca z JSON wydaje się natywna.

Aby odczytać JSON z pliku zewnętrznego, użyj funkcji `json.load()`, która analizuje strumień pliku i tłumaczy struktury JSON na typy danych Pythona. Jeśli dane JSON są już załadowane do pamięci jako ciąg znaków, zamiast tego użyj funkcji `json.loads()` („s” oznacza ciąg znaków). Wybranie właściwej funkcji zapobiega awariom parsera.

Podczas pracy z JSON najlepszą praktyką jest obsługa kodowania i potencjalnych błędów formatowania. Użycie `encoding="utf-8"` w instrukcji `open()` chroni skrypt przed awarią znaków specjalnych. Zawijanie operacji na plikach w bloku „try-except” przechwytującym „json.JSONDecodeError” gwarantuje, że aplikacja ulegnie degradacji, jeśli plik JSON będzie zniekształcony.

Dane wyjściowe kodu i wykonania

Ten kod demonstruje zapisanie przykładowego pliku JSON, odczytanie i przeanalizowanie go z powrotem do słownika Pythona oraz obsługę ciągu JSON.

import json

# Let's write a mock JSON file first
sample_data = {
    "user": "developer123",
    "skills": ["python", "javascript", "sql"],
    "active": True
}
with open("data.json", "w", encoding="utf-8") as f:
    json.dump(sample_data, f, indent=4)

# 1. Reading from a JSON file (using json.load)
with open("data.json", "r", encoding="utf-8") as file:
    data_from_file = json.load(file)
    print("File Content type:", type(data_from_file).__name__)
    print("User skill list:", data_from_file["skills"])

# 2. Reading from a JSON string (using json.loads)
json_string = '{"host": "localhost", "port": 5432, "ssl": false}'
data_from_str = json.loads(json_string)
print("\nString Content type:", type(data_from_str).__name__)
print("Database host:", data_from_str["host"])
Wyjście terminala
File Content type: dict
User skill list: ['python', 'javascript', 'sql']

String Content type: dict
Database host: localhost

Wdrażanie krok po kroku

  • Zaimportuj wbudowany moduł json do swojego skryptu.
  • Otwórz plik JSON, używając open("nazwa pliku.json", "r", encoding="utf-8") jako pliku.
  • Przekaż obiekt pliku do json.load(file), aby przeanalizować zawartość do słownika Pythona.
  • Użyj json.loads(string_data), jeśli chcesz przeanalizować surowy ciąg JSON już załadowany do pamięci.

Często zadawane pytania

Jaka jest różnica między json.load() i json.loads()?

json.load() akceptuje obiekt strumieniowy przypominający plik (odczyt z dysku), podczas gdy json.loads() akceptuje standardowy obiekt typu string lub bytes zawierający treść JSON (odczyt z pamięci).

Jak radzić sobie z błędami serializacji JSON dla klas niestandardowych?

Moduł json języka Python nie może domyślnie serializować instancji klas niestandardowych. Należy podać niestandardową klasę kodera rozszerzającą json.JSONEncoder lub najpierw wyodrębnić atrybuty instancji do słownika, używając metody pomocniczej.

Powiązane tematy

Polecane zasoby Pythona

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