簡體   English   中英

馬歇爾/解組,編碼/解碼和JSON的序列化/反序列化之間的關系和區別?

[英]Relations and differences between marshall/unmarshal, encoding/decoding, and serialization/deserialization for JSON?

在Go的JSON包中,我看到有marshaldecode和其他函數。

我認為decodemarshal相反,但后者意識到我可能錯了。

我認為我的基本問題是:

對於JSON,marshall / unmarshal,編碼/解碼和序列化/反序列化之間有什么關系和區別?

謝謝。

查看此處的示例為什么在此處使用json包的Decode和Marshal方法?

我個人會說所有這些術語都是同義詞,但編碼/解碼卻不那么容易。 在Go Marshal和Unmarshal恰好是用於描述將字符串形式的json轉換為對象的術語,反之亦然。 但是在C#中,這些相同的方法稱為序列化和反序列化,據我所知,術語根本不在Go中(至少在任何std lib中都沒有)。

編碼可以用作形容詞來描述存儲某些數據的格式,最常見的用途可能是字符編碼(UTF-8)。 在Go中它也被用作名詞來描述可以解組/編組json的對象。 Marshal / Unmarshal總是用作動詞,你在json上采取行動。

Go中還使用了編碼來引用更大類的包來處理從一種編碼到另一種編碼的轉換。

如果您告訴我您正在編組,編組,反序列化或序列化某些對象或json,我會完全理解您的意思。 如果你說你是json編碼對象我會問一個澄清的問題。 如果你說“響應是json編碼的”我會得到你的意思,雖然我認為你使用這些詞而不是僅僅說“響應是json”是奇怪的。 希望這或多或少是您正在尋找的信息。

哦,也是為了更清晰

Unmarshal == deserialize == decode

Marshal == serialize == encode

encoding/json包中, Marshal函數和反Unmarshal函數返回並操作單個固定字節片。 它們將單個對象轉換為字節,反之亦然。

還有EncoderDecoder類型。 它們包含EncodeDecode方法,它們分別對io.Readerio.Writer進行字節流操作。 它們還允許使用這些流使用換行符分隔符對多個對象進行序列化或反序列化。

Marshal / Unmarshal函數和編碼器/解碼器類型的基本機制是相同的,它們都使用相同的內部encodeState.marshaldecodeState.unmarshal代碼路徑。 唯一真正的區別是它們為各種使用模式提供了替代訪問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM