2016-07-27 77 views
2

In Gos JSON-Paket sah ich, dass es marshal, decode und andere Funktionen gibt.Beziehungen und Unterschiede zwischen Marshall/Unmarshal, Codierung/Decodierung und Serialisierung/Deserialisierung für JSON?

Ich dachte, dass decode das Gegenteil zu marshal ist, aber letzteres erkannte, dass ich falsch liegen könnte.

ich glaube, die grundlegende Frage, die ich habe, ist:

Was die Beziehungen und Unterschiede zwischen marshall/Abstellungs, Codierung/Decodierung und Serialisierung/Deserialisierung für JSON sind?

Danke.

Sehen Sie ein Beispiel hier Why are json package's Decode and Marshal methods used here?

+0

@ Tim, warum hast du die * Antwort noch nicht ausgewählt? Immer noch unzufrieden? – xpt

Antwort

2

ich persönlich alle diese Begriffe Synonyme sagen würden, sind allerdings weniger mit Codierung/Decodierung. In Go Marshal und Unmarshal sind die Begriffe, die verwendet werden, um json in einer String-Form in ein Objekt zu konvertieren und umgekehrt. In C# werden diese Methoden serialisiert und deserialisiert, soweit ich weiß, dass die Terminologie überhaupt nicht in Go ist (zumindest nicht in einer Standardbibliothek).

Codierung kann als ein Adjektiv verwendet werden, um das Format zu beschreiben, in dem einige Daten gespeichert werden, die häufigste Verwendung ist wahrscheinlich Zeichencodierung (UTF-8). In Go wird es auch als Substantiv verwendet, um Objekte zu beschreiben, die json abmarshalen/marshalen können. Marshal/Unmarshal werden immer als Verben verwendet, Sie nehmen diese Aktion auf dem JSON.

Codierung wird auch in Go verwendet, um auf eine größere Kategorie von Paketen zu verweisen, die sich mit der Konvertierung von einer Kodierung zu einer anderen befassen.

Wenn Sie mir gesagt haben, dass Sie ein Objekt oder JSON Marshalling, Marshalling, Deserialisierung oder Serialisierung waren, würde ich genau verstehen, was Sie meinten. Wenn du sagst, du würdest ein Objekt kodieren, würde ich eine klärende Frage stellen. Wenn Sie sagten, dass die Antwort json codiert ist, würde ich verstehen, was Sie meinen, obwohl ich denken würde, dass es komisch ist, dass Sie diese Wörter verwendet haben, anstatt nur zu sagen: "Die Antwort ist json". Hoffe das ist mehr oder weniger die Information die du suchst. auch

Oh, nur für mehr Klarheit

Unmarshal == deserialize == decode

Marshal == serialize == encode

+0

Danke. Sehen Sie ein Beispiel hier http://stackoverflow.com/questions/38620151/why-are-json-packages-decode-and-marshal-methods-used-here – Tim

+0

@Tim werde ich mir das ansehen, wenn ich ein bekomme Minute. – evanmcdonnal

2

Im encoding/json Paket, das Marshal Funktion und die inverse Funktion Unmarshal Rückgabe- und arbeiten auf einzelnen festen Byte-Scheiben. Sie transformieren einzelne Objekte in Bytes und umgekehrt.

Es gibt auch die Typen Encoder und Decoder. Diese enthalten die Methoden Encode und Decode, und sie arbeiten mit Byteströmen, wobei io.Reader bzw. io.Writer genommen werden. Sie ermöglichen auch mehrere Objekte serialisiert oder deserialisiert mit einem Newline-Begrenzer mit diesen Streams.

Die zugrunde liegenden Mechanismen der Marshal/Unmarshal-Funktionen und der Encoder/Decoder-Typen sind identisch, beide verwenden die gleichen internen encodeState.marshal und decodeState.unmarshal Codepfade. Der einzige wirkliche Unterschied ist, dass sie einen alternativen Zugang für verschiedene Nutzungsmuster bieten.

+0

Danke. Sehen Sie ein Beispiel hier http://stackoverflow.com/questions/38620151/why-are-json-packages-decode-and-marshal-methods-used-here – Tim