Was ist Deserialisieren und Serialisieren in JSON?


Antworten:


227

JSON ist ein Format, das Objekte in einer Zeichenfolge codiert. Serialisierung bedeutet, ein Objekt in diese Zeichenfolge zu konvertieren , und Deserialisierung ist die inverse Operation (Zeichenfolge konvertieren -> Objekt). .

Wenn Daten übertragen oder in einer Datei gespeichert werden, müssen die Daten Byte-Zeichenfolgen sein, komplexe Objekte liegen jedoch selten in diesem Format vor. Durch die Serialisierung können diese komplexen Objekte für eine solche Verwendung in Byte-Zeichenfolgen konvertiert werden. Nachdem die Byte-Strings übertragen wurden, muss der Empfänger das ursprüngliche Objekt aus dem Byte-String wiederherstellen. Dies ist als Deserialisierung bekannt.

Angenommen, Sie haben ein Objekt:

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

Durch die Serialisierung in JSON wird es in eine Zeichenfolge konvertiert:

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

die gespeichert oder per Kabel an einen beliebigen Ort gesendet werden können. Der Empfänger kann diese Zeichenfolge dann deserialisieren, um das ursprüngliche Objekt zurückzugewinnen. {foo: [1, 4, 7, 10], bar: "baz"}.


3
@kennytm - Ich versuche meinen Kopf darum zu wickeln, Sachen über den Draht zu schicken. Unabhängig davon, ob ich eine binäre Codierung oder json, xml oder proto buf verwende - die Daten müssen immer in Bytes angegeben werden, bevor sie über das Kabel gesendet werden können. Ist das wahr?
Nirmal

1
@Nirmal Ja. ___
Kennytm

1
Ein Gedächtnisgerät, mit dem ich mich an den Unterschied erinnere, ist, dass "Serialisierung Objekte in Seriennummern verwandelt"
Janac Meena

1
Warum also nicht einfach"{foo: [1, 4, 7, 10], bar: "baz"}"
Panoet

2
@EnricoMariaDeAngelis JSON-Eigenschaften müssen in Anführungszeichen stehen. Es ist eine Notwendigkeit - sehen Sie sich das erste Beispiel im Wiki an: en.wikipedia.org/wiki/JSON
Cloud

8

Im Zusammenhang mit der Datenspeicherung ist Serialisierung (oder Serialisierung) der Prozess der Übersetzung von Datenstrukturen oder Objektzuständen in ein Format, das gespeichert (z. B. in einer Datei oder einem Speicherpuffer) oder übertragen (z. B. über eine Netzwerkverbindung) werden kann Link) und später rekonstruiert. [...]
Die entgegengesetzte Operation, bei der eine Datenstruktur aus einer Reihe von Bytes extrahiert wird, ist die Deserialisierung . Aus Wikipedia

In Python führt "Serialisierung" nichts anderes aus, als nur die angegebene Datenstruktur (z. B. a dict) in ihren gültigen JSON-Anhänger (Objekt) zu konvertieren .

  • Pythons Truewerden in JSONs konvertiert trueund das Wörterbuch selbst wird dann in Anführungszeichen gesetzt.
  • Sie können den Unterschied zwischen einem Python-Wörterbuch und JSON leicht anhand ihrer Booleschen Werte erkennen:
    • Python : True/ False,
    • JSON : true/false
  • Das in Python integrierte Modul jsonist die Standardmethode für die Serialisierung:

Codebeispiel:

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
#   }
# }

Quelle: realpython.com


-3

Erläuterung von Serialize und Deserialize mit Python

In Python wird das Pickle-Modul für die Serialisierung verwendet. Daher wird der Serialisierungsprozess in Python als Beizen bezeichnet . Dieses Modul ist in der Python-Standardbibliothek verfügbar .

Serialisierung mit Gurke

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()

Die PICKLE-Datei (kann von einem Texteditor wie dem Editor geöffnet werden) enthält Folgendes (serialisierte Daten):

€} q (KX 6qKX 2qKX fqu.

Deserialisierung mit Gurke

import pickle

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

print(get_deserialized_data_back)

Ausgabe:

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


4
Der Benutzer fragte jedoch, ob JSON nicht einlegen soll. Das ist etwas offtopisch.
smci

Dies ist die ursprüngliche Frage: Was ist Deserialisieren und Serialisieren in JSON? Ich habe Pythons Pickle-Modul verwendet, um die Idee zu demonstrieren. Ich habe ein Werkzeug verwendet, um eine Idee zu erklären. Sie konzentrieren sich mehr auf das Werkzeug als auf die Idee.
Asif
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.