Co to jest deserializacja i serializacja w formacie JSON?

Odpowiedzi:

260

JSON to format, który koduje obiekty w ciągu. Serializacja oznacza konwersję obiektu na ten ciąg , a deserializacja jest jego odwrotną operacją (konwersja ciągu -> obiekt) .

Podczas przesyłania danych lub przechowywania ich w pliku dane muszą być ciągami bajtów, ale złożone obiekty rzadko występują w tym formacie. Serializacja może konwertować te złożone obiekty na ciągi bajtów do takiego użycia. Po przesłaniu ciągów bajtów odbiorca będzie musiał odzyskać oryginalny obiekt z ciągu bajtów. Jest to znane jako deserializacja.

Powiedz, że masz obiekt:

{foo: [1, 4, 7, 10], bar: "baz"}

serializacja do formatu JSON przekształci go w ciąg:

'{"foo":[1,4,7,10],"bar":"baz"}'

które mogą być przechowywane lub przesyłane przewodowo do dowolnego miejsca. Odbiorca może następnie deserializować ten ciąg, aby odzyskać oryginalny obiekt. {foo: [1, 4, 7, 10], bar: "baz"}.

kennytm
źródło
3
@kennytm - próbuję zawinąć głowę dookoła, wysyłając rzeczy przez kabel. Niezależnie od tego, czy używam kodowania binarnego, czy używam json, xml czy proto buf - dane zawsze muszą być w bajtach, zanim będą mogły zostać przesłane przez sieć. Czy to prawda?
Nirmal
1
@Nirmal Yes. ___
kennytm
1
Urządzenie mnemoniczne, którego używam do zapamiętania różnicy, polega na tym, że „Serializacja zamienia obiekty w numery seryjne”
Janac Meena
1
Dlaczego więc po prostu nie"{foo: [1, 4, 7, 10], bar: "baz"}"
obejrzyj panoramę
2
Właściwości JSON @EnricoMariaDeAngelis muszą być w cudzysłowach. To konieczność - zobacz pierwszy przykład na wiki: en.wikipedia.org/wiki/JSON
Cloud
10

W kontekście przechowywania danych serializacja (lub serializacja) to proces tłumaczenia struktur danych lub stanu obiektu na format, który może być przechowywany (na przykład w pliku lub buforze pamięci) lub przesyłany (na przykład przez połączenie sieciowe) link) i zrekonstruowany później. […]
Odwrotną operacją, wyodrębniającą strukturę danych z szeregu bajtów, jest deserializacja . Z Wikipedii

W Pythonie „serializacja” nie robi nic innego, jak tylko konwersję podanej struktury danych (np. A dict) do jej prawidłowego wisiorka JSON (obiekt).

  • Python Truezostanie przekonwertowany na JSON, truea sam słownik zostanie umieszczony w cudzysłowie.
  • Różnicę między słownikiem Pythona a formatem JSON można łatwo zauważyć na podstawie ich wartości logicznych:
    • Python : True/ False,
    • JSON : true/false
  • Wbudowany moduł Pythona jsonto standardowy sposób serializacji:

Przykład kodu:

data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian",
        "male": True,
    }
}

import json
json_data = json.dumps(data, indent=2) # serialize
restored_data = json.loads(json_data) # deserialize

# serialized json_data now looks like:
# {
#   "president": {
#     "name": "Zaphod Beeblebrox",
#     "species": "Betelgeusian",
#     "male": true
#   }
# }

Źródło: realpython.com

winklerrr
źródło
-2

Wyjaśnienie serializacji i deserializacji przy użyciu języka Python

W Pythonie do serializacji używany jest moduł pickle . Tak więc proces serializacji w Pythonie nazywa się wytrawianiem . Ten moduł jest dostępny w standardowej bibliotece Pythona .

Serializacja za pomocą marynaty

import pickle

#the object to serialize
example_dic={1:"6",2:"2",3:"f"}

#where the bytes after serializing end up at, wb stands for write byte
pickle_out=open("dict.pickle","wb")
#Time to dump
pickle.dump(example_dic,pickle_out)
#whatever you open, you must close
pickle_out.close()

Plik PICKLE (można go otworzyć za pomocą edytora tekstu, takiego jak notatnik) zawiera następujące (dane serializowane):

€} q (KX 6qKX 2qKX fqu.

Deserializacja za pomocą marynaty

import pickle

pickle_in=open("dict.pickle","rb")
get_deserialized_data_back=pickle.load(pickle_in)

print(get_deserialized_data_back)

Wynik:

{1: '6', 2: '2', 3: 'f'}

Jak gdyby
źródło
5
Użytkownik zapytał jednak o JSON, a nie o pikle. To jest nieco nietypowe.
smci
To jest oryginalne pytanie: co to jest deserializacja i serializacja w formacie JSON? Użyłem modułu pikle Pythona, aby zademonstrować pomysł. Użyłem narzędzia, aby wyjaśnić pomysł. Koncentrujesz się bardziej na narzędziu niż na pomyśle.
Asif
Twoje odpowiedzi mi pomogły, dzięki
shivam13juna