json
Zamienia dane Pythona na tekst JSON i z powrotem. Podstawa zapisu danych i komunikacji z API.
- Zwraca
dumps()zwraca napis, aloads()obiekt Pythona, najczęściejdictalbolist.
Przykład
#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__)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
#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 przezdumps()lubdump().indent
int, opcjonalny
Liczba spacji wcięcia. Bez niego cały JSON trafia do jednej linii.ensure_ascii
bool, domyślnie True
UstawFalse, ż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=strzapisze na przykład daty jako tekst.
Więcej przykładów
#import json
city = {"city": "Kraków", "students": 120}
print(json.dumps(city))
print(json.dumps(city, ensure_ascii=False, indent=2))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)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=stralbo zamieniając je wcześniej na słowniki.
Powiązane hasła
#- dict()Tworzy słownik z par klucz–wartość lub argumentów nazwanych.
- open()Otwiera plik do odczytu lub zapisu i zwraca obiekt pliku.
- withMenedżer kontekstu: automatyczne przygotowanie i sprzątanie zasobów.
- datetimeDaty i godziny: tworzenie, formatowanie, odczyt z tekstu i obliczenia na odstępach czasu.
- pathlibŚcieżki jako obiekty: łączenie operatorem /, odczyt części ścieżki oraz praca z plikami.
- csvOdczyt i zapis plików CSV, czyli tabel zapisanych jako tekst, w których wartości oddziela przecinek lub średnik.
Widzisz błąd albo brakuje przykładu? Napisz do nas.