json

Zamienia dane Pythona na tekst JSON i z powrotem. Podstawa zapisu danych i komunikacji z API.

Zwraca
dumps() zwraca napis, a loads() obiekt Pythona, najczęściej dict albo list.
Na tej stronie

Przykład

#
Python
import json

student = {
    "name": "Ania",
    "points": 1240,
    "courses": ["HTML", "Python"],
    "premium": False,
    "mentor": None,
}

text = json.dumps(student)
print(text)

data = json.loads('{"level": 3, "badges": ["start", "seria_7"]}')
print(data["badges"][1], type(data).__name__)
Wynikzapisany wynik, możesz go sprawdzić
{"name": "Ania", "points": 1240, "courses": ["HTML", "Python"], "premium": false, "mentor": null}
seria_7 dict

Definicja i zastosowanie

#

Moduł json zamienia słowniki, listy, napisy, liczby, wartości logiczne i None na tekst w formacie JSON, a także odczytuje taki tekst z powrotem do obiektów Pythona. JSON to najpopularniejszy format wymiany danych między aplikacjami, API i plikami konfiguracyjnymi.

Funkcje z literą „s” na końcu pracują na napisach: dumps() tworzy tekst, a loads() go odczytuje. Wersje bez „s”, czyli dump() i load(), zapisują do pliku i czytają z pliku. Przy zamianie True staje się true, None staje się null, a krotki zamieniają się w listy.

Domyślnie polskie litery są zapisywane jako sekwencje typu \u0142. Argument ensure_ascii=False zachowuje je w czytelnej postaci, a indent=2 rozkłada wynik na wiele wciętych linii. Niepoprawny tekst zgłasza wyjątek json.JSONDecodeError.

Składnia

#
Składnia
import json

json.dumps(obj, indent=None, ensure_ascii=True, sort_keys=False)
json.loads(tekst)
json.dump(obj, plik)
json.load(plik)

Parametry

#
  • obj

    dict, list, str, int, float, bool, None

    Dane do zapisania przez dumps() lub dump().
  • indent

    int, opcjonalny

    Liczba spacji wcięcia. Bez niego cały JSON trafia do jednej linii.
  • ensure_ascii

    bool, domyślnie True

    Ustaw False, żeby polskie znaki zostały zapisane wprost, a nie jako \u….
  • sort_keys

    bool, domyślnie False

    Sortuje klucze słowników alfabetycznie.
  • default

    funkcja, opcjonalna

    Wywoływana dla obiektów, których JSON nie obsługuje. default=str zapisze na przykład daty jako tekst.

Więcej przykładów

#
Polskie znaki i wcięcia
Python
import json

city = {"city": "Kraków", "students": 120}

print(json.dumps(city))
print(json.dumps(city, ensure_ascii=False, indent=2))
Wynikzapisany wynik, możesz go sprawdzić
{"city": "Krak\u00f3w", "students": 120}
{
"city": "Kraków",
"students": 120
}
Zapis i odczyt pliku JSON
Python
import json

progress = {"student": "Ania", "done": ["1_1", "1_2"], "streak": 5}

with open("postepy.json", "w", encoding="utf-8") as file:
    json.dump(progress, file, ensure_ascii=False, indent=2)

with open("postepy.json", encoding="utf-8") as file:
    loaded = json.load(file)

print(loaded["done"])
print(loaded == progress)
Wynikzapisany wynik, możesz go sprawdzić
['1_1', '1_2']
True

Dobre praktyki

#
  • JSON wymaga podwójnych cudzysłowów wokół kluczy i napisów. Tekst skopiowany z print(slownik), z pojedynczymi cudzysłowami, nie jest poprawnym JSON-em.
  • Klucze w JSON są zawsze napisami: słownik {1: "a"} po zapisie i odczycie będzie miał klucz "1".
  • Daty i własne obiekty zapiszesz, podając default=str albo zamieniając je wcześniej na słowniki.

Powiązane hasła

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.