Jak analizować JSON w Pythonie

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.

Zacznijmy!⏳

Co to jest JSON?

JSON oznacza JavaScript Object Notation 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 wysyłania zapytań do interfejsów API. JSON jest również szeroko stosowany w komunikacji klient-serwer w aplikacjach. Ponadto możesz używać 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ą oznaczane jako prawda i fałsz. W Pythonie są one konwertowane na wartości logiczne Prawda i Fałsz.

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,

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

Spowoduje to załadowanie do słownika Pythona .

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 przy użyciu metody load() . 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,

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

Tak więc metoda dumps() zrzuca do ciągu JSON .

Do naszego istniejącego słownika Pythona py_dict. dodajmy nowy klucz „filmy”. 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 wcięcia, aby dodać wcięcie.

Możesz to zrobić, ustawiając wcięcie 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: „autor”, „tytuł” ​​i „rok”.

Do tej pory nauczyłeś się, jak 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(). load() ł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.

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 do pliku JSON .

W poprzedniej sekcji mieliśmy słownik py_dict. Teraz zrzućmy to do nowego pliku JSON. I nazwijmy go nowy_plik.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 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() 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ć.