Jak analizować JSON w Pythonie

Opublikowany: 2022-02-09

JSON to popularny format wymiany danych. Python jest dostarczany z wbudowanym modułem JSON do analizowania i pracy z danymi JSON. A ten samouczek nauczy Cię wszystkiego o pracy z JSON w Pythonie.

Pod koniec tego samouczka nauczysz się:

  • podstawy JSON,
  • jak parsować i tworzyć ciągi JSON w Pythonie i
  • jak czytać i pisać do plików JSON w Pythonie.

Zaczynajmy!

Co to jest JSON?

JSON to skrót od J ava S cript Object N otation i jest to tekstowy format wymiany danych. Chociaż JSON jest początkowo inspirowany obiektami JavaScript, prawie wszystkie języki programowania obsługują pracę z JSON.

Jeśli kiedykolwiek pracowałeś z interfejsami API lub czytałeś pliki konfiguracyjne — prawdopodobnie natknąłeś się na JSON.

Wysyłasz i odbierasz dane w formacie JSON podczas wykonywania zapytań do interfejsów API. JSON jest również szeroko stosowany w komunikacji klient-serwer w aplikacjach. Ponadto możesz użyć JSON również do przechowywania danych ogólnego przeznaczenia.

Format JSON jest bardzo podobny do słownika Pythona. Słowniki to potężne wbudowane struktury danych w Pythonie, które przechowują dane w parach klucz-wartość.

Zanim przejdziemy dalej, oto kilka punktów, na które warto zwrócić uwagę:

  • W Pythonie obiekt JSON jest przechowywany jako słownik.
  • Tablica w JSON jest przechowywana jako lista Pythona.
  • W JSON wartości logiczne są oznaczone jako true i false . W Pythonie są one konwertowane na wartości logiczne True i False .

Aby uzyskać więcej informacji na temat typów danych, które są tłumaczone z JSON na Python, przeczytaj dokumentację tutaj.

Ponieważ moduł json jest częścią standardowej biblioteki Pythona, nie musisz go instalować. Możesz zaimportować do swojego bieżącego katalogu w następujący sposób:

 import json

Jak załadować ciąg JSON w Pythonie

Ogólna składnia ładowania ciągu JSON w Pythonie to:

 <dict_obj> = json.loads(<json_str>)

Tutaj,

  • <dict_obj> to słownik Pythona, do którego chcesz załadować ciąg JSON,
  • <json_str> to dowolny prawidłowy ciąg JSON.

Spowoduje to załadowanie <json_str> do słownika Pythona <dict_obj> .

Zakodujmy przykład. Tutaj json_str jest ciągiem JSON.

 json_str = ''' { "books": [ { "title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908" }, { "title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927" } ] } '''

A poniższy fragment kodu pokazuje, jak załadować ciąg JSON json_str do słownika Pythona za pomocą metody load loads() . Możesz użyć wbudowanej funkcji type() , aby sprawdzić, czy py_dict jest słownikiem Pythona.

 py_dict = json.loads(json_str) type(py_dict) # Output: dict print(py_dict) # Output {'books': [{'title': 'The Wind in the Willows', 'author': 'Kenneth Grahame', 'year': '1908'}, {'title': 'To the Lighthouse', 'author': 'Virginia Woolf', 'year': '1927'}]}

Jak pokazano w powyższym kodzie, wszystkie pola w ciągu JSON są parami klucz-wartość w py_dict .

Jak tworzyć ciągi JSON w Pythonie

Załóżmy, że masz słownik Pythona. Jak więc utworzyć z niego ciąg JSON?

Możesz to zrobić za pomocą metody dumps() o następującej składni:

 <json_str> = json.dumps(<dict_obj>)

Tutaj,

  • <dict_obj> to słownik Pythona, z którego chcesz utworzyć ciąg JSON,
  • <json_str> to wynikowy ciąg JSON.

Tak więc metoda dumps dumps() zrzuca <dict_obj> do ciągu JSON <json_str> .

Do naszego istniejącego słownika Pythona py_dict . dodajmy nowy klucz "movies" . Możesz to zrobić, jak pokazano na poniższym fragmencie kodu:

 py_dict["movies"] = [{"title":"The Imitation Game","year":"2014", "lang":"en","watched":True}]

Teraz zrzućmy zmodyfikowany słownik do nowego ciągu JSON json_str2 za pomocą metody dumps() .

 json_str2 = json.dumps(py_dict) print(json_str2) # Output {"books": [{"title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908"}, {"title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927"}], "movies": [{"title": "The Imitation Game", "year": "2014", "lang": "en", "watched": true}]}

Jak widać w powyższym przykładzie, wyjściowy ciąg JSON jest trudny do odczytania bez odpowiedniego formatowania. Możesz użyć opcjonalnego parametru indent , aby dodać wcięcie.

Możesz to zrobić, ustawiając indent na liczbę całkowitą, taką jak 2, jak pokazano poniżej:

 json_str2 = json.dumps(py_dict, indent = 2) print(json_str2) # Output { "books": [ { "title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908" }, { "title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927" } ], "movies": [ { "title": "The Imitation Game", "year": "2014", "lang": "en", "watched": true } ] }

Obserwuj, jak dane wyjściowe zostały sformatowane za pomocą wcięć i łatwo je prześledzić.

Uwaga : Jeśli chcesz, aby klucze były sortowane w kolejności alfabetycznej, możesz ustawić parametr sort_keys na True .

Jak widać na poniższym fragmencie kodu, klucze zostały posortowane w kolejności alfabetycznej.

 json_str2 = json.dumps(py_dict, indent = 2, sort_keys=True) print(json_str2) # Output { "books": [ { "author": "Kenneth Grahame", "title": "The Wind in the Willows", "year": "1908" }, { "author": "Virginia Woolf", "title": "To the Lighthouse", "year": "1927" } ], "movies": [ { "lang": "en", "title": "The Imitation Game", "watched": true, "year": "2014" } ]

A klawisze pojawiają się teraz w kolejności alfabetycznej: "author" , "title" ​​i "year" .

Do tej pory nauczyłeś się pracować z ciągami JSON w Pythonie. W następnej sekcji dowiesz się, jak pracować z plikami JSON.

Jak czytać plik JSON w Pythonie

Aby odczytać plik JSON w Pythonie, użyj następującej składni:

 json.load(<json-file>) # where <json-file> is any valid JSON file.

Zwróć uwagę, jak używamy metody load() , a nie load( loads() . load( loads() ładuje ciąg znaków JSON, podczas gdy load() ładuje plik JSON .

Powinieneś rozważyć użycie menedżerów kontekstu podczas pracy z plikami w Pythonie. Możesz także spróbować odczytać pliki w następujący sposób, bez korzystania z menedżera kontekstu:

 my_file = open('students.json','r') contents = my_file.read() print(contents) file.close()

Jeśli nie zamkniesz pliku, może dojść do marnowania zasobów.

Jednak podczas pracy z menedżerami kontekstów pliki są automatycznie zamykane po zakończeniu operacji na plikach.

I możesz użyć menedżera kontekstu do odczytu plików, jak pokazano poniżej:

 with open('students.json','r') as file: data = json.load(file) print(data) # Output {'students': [{'roll_num': 'cs27', 'name': 'Anna', 'course': 'CS'}, {'roll_num': 'ep30', 'name': 'Kate', 'course': 'PHY'}]}

Kiedy czytasz z pliku, określ tryb jako read —wskazywany przez 'r' w powyższym kodzie.

Uwaga : Aby łatwo poruszać się po bieżącym katalogu, upewnij się, że plik JSON znajduje się w tym samym folderze co main.py , jak pokazano na poniższym obrazku. Jeśli plik JSON znajduje się w innym folderze, pamiętaj o określeniu ścieżki do pliku.

read-json-file-in-python
Przeczytaj plik JSON w Pythonie.

W następnej sekcji dowiesz się, jak pisać do pliku JSON.

Jak pisać do pliku JSON w Pythonie?

Aby zapisać w istniejącym pliku JSON lub utworzyć nowy plik JSON, użyj metody dump() , jak pokazano:

 json.dump(<dict_obj>,<json_file>) # where <dict_obj> is a Python dictionary # and <json_file> is the JSON file

Tak więc powyższa składnia zrzuca słownik <dict_obj> do pliku JSON <json_file> .

W poprzedniej sekcji mieliśmy słownik py_dict . Teraz zrzućmy to do nowego pliku JSON. I nazwijmy go new_file.json .

Poniższa komórka kodu pokazuje, jak można użyć funkcji dump() :

 with open('new_file.json','w') as file: json.dump(py_dict,file)

Uwaga : Otwarcie pliku w trybie zapisu ( w ) nadpisuje zawartość, jeśli plik istnieje. Jeśli plik nie istnieje, plik jest tworzony.

Po wykonaniu powyższej komórki kodu zobaczysz, że nowy plik JSON został utworzony w bieżącym katalogu roboczym. I możesz iść dalej i zbadać zawartość pliku JSON.

utwórz-json-plik-python
Utwórz plik JSON w Pythonie

Podczas zapisywania do plików kluczowym celem jest przechowywanie danych. A jeśli chcesz zachować formatowanie, możesz również użyć parametrów indent i sort_keys .

Wniosek

Czas na szybkie podsumowanie.

W tym samouczku nauczyłeś się:

  • podstawy korzystania z JSON,
  • jak używać metod load( loads() i load() do odczytywania odpowiednio stringów JSON i plików JSON,
  • jak używać metod dumps() i dump() do zrzucania słowników Pythona odpowiednio do ciągów JSON i plików JSON.

Mam nadzieję, że ten samouczek okazał się pomocny. Miłej nauki!

Możesz również spojrzeć na narzędzia JSON, aby przeanalizować, sformatować i zweryfikować.