Trwałość danych w Pythonie - moduł JSON

JSON oznacza JavaScript Object Notation. Jest to lekki format wymiany danych. Jest to niezależny od języka i wieloplatformowy format tekstowy, obsługiwany przez wiele języków programowania. Ten format jest używany do wymiany danych między serwerem WWW a klientami.

Format JSON jest podobny do marynaty. Jednak serializacja pikle jest specyficzna dla Pythona, podczas gdy format JSON jest implementowany w wielu językach, dlatego stał się uniwersalnym standardem. Funkcjonalność i interfejs modułu json w standardowej bibliotece Pythona jest podobny do modułów pickle i marshal.

Podobnie jak w module pickle, moduł json zapewnia również dumps() i loads() funkcja do serializacji obiektu Python do łańcucha zakodowanego w formacie JSON oraz dump() i load() funkcje zapisują i odczytują zserializowane obiekty Pythona do / z pliku.

  • dumps() - Ta funkcja konwertuje obiekt do formatu JSON.

  • loads() - Ta funkcja konwertuje ciąg JSON z powrotem na obiekt Pythona.

Poniższy przykład przedstawia podstawowe użycie tych funkcji -

import json
   data=['Rakesh',{'marks':(50,60,70)}]
   s=json.dumps(data)
json.loads(s)

Funkcja dumps () może przyjmować opcjonalny argument sort_keys. Domyślnie jest to Fałsz. Jeśli jest ustawiona na True, klucze słownika są wyświetlane w kolejności posortowanej w ciągu JSON.

Funkcja dumps () ma inny opcjonalny parametr o nazwie indent, który przyjmuje liczbę jako wartość. Decyduje o długości każdego segmentu sformatowanej reprezentacji łańcucha json, podobnie jak na wydruku wyjściowym.

Moduł json posiada również obiektowe API odpowiadające powyższym funkcjom. W module zdefiniowane są dwie klasy - JSONEncoder i JSONDecoder.

JSONEncoder

Obiektem tej klasy jest koder struktur danych Pythona. Każdy typ danych Python jest konwertowany na odpowiedni typ JSON, jak pokazano w poniższej tabeli -

Pyton JSON
Dykt obiekt
lista, krotka szyk
Str strunowy
Wyliczenia typu int, float, int- i float-pochodne numer
Prawdziwe prawdziwe
Fałszywy fałszywy
Żaden zero

Instancja klasy JSONEncoder jest tworzona przez konstruktora JSONEncoder (). Następujące ważne metody są zdefiniowane w klasie enkodera -

Sr.No. Metody i opis
1

encode()

serializuje obiekt Pythona do formatu JSON

2

iterencode()

Koduje obiekt i zwraca iterator, który daje zakodowaną postać każdego elementu w obiekcie.

3

indent

Określa poziom wcięcia zakodowanego ciągu

4

sort_keys

ma wartość true lub false, aby klucze były wyświetlane w kolejności posortowanej lub nie.

5

Check_circular

jeśli prawda, sprawdź odwołanie cykliczne w obiekcie typu kontenera

Poniższy przykład koduje obiekt listy Pythona.

e=json.JSONEncoder()
e.encode(data)

Klasa JSONDecoder

Obiekt tej klasy pomaga w dekodowaniu w łańcuchu json z powrotem do struktury danych Pythona. Główną metodą w tej klasie jest decode (). Poniższy przykładowy kod pobiera obiekt listy języka Python z zakodowanego ciągu we wcześniejszym kroku.

d=json.JSONDecoder()
d.decode(s)

Moduł json definiuje load() i dump() funkcje do zapisywania danych JSON w pliku takim jak obiekt - który może być plikiem dyskowym lub strumieniem bajtów i odczytywaniem z nich danych.

wysypisko()

Ta funkcja zapisuje dane obiektu języka Python w formacie JSON do pliku. Plik należy otworzyć w trybie „w”.

import json
data=['Rakesh', {'marks': (50, 60, 70)}]
   fp=open('json.txt','w')
   json.dump(data,fp)
   fp.close()

Ten kod utworzy plik „json.txt” w bieżącym katalogu. Przedstawia zawartość w następujący sposób -

["Rakesh", {"marks": [50, 60, 70]}]

Załaduj()

Ta funkcja ładuje dane JSON z pliku i zwraca z niego obiekt Pythona. Plik musi być otwarty z uprawnieniami do odczytu (powinien mieć tryb „r”).

Example

fp=open('json.txt','r')
   ret=json.load(fp)
   print (ret)
   fp.close()

Output

['Rakesh', {'marks': [50, 60, 70]}]

Plik json.tool moduł posiada również interfejs wiersza poleceń, który sprawdza poprawność danych w pliku i drukuje obiekt JSON w całkiem sformatowany sposób.

C:\python37>python -m json.tool json.txt
[
   "Rakesh",   
   {
      "marks": [
         50,
         60,
         70
      ]
   }
]