[英]Relations and differences between marshall/unmarshal, encoding/decoding, and serialization/deserialization for JSON?
在Go的JSON包中,我看到有marshal
, decode
和其他函數。
我認為decode
與marshal
相反,但后者意識到我可能錯了。
我認為我的基本問題是:
對於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
函數返回並操作單個固定字節片。 它們將單個對象轉換為字節,反之亦然。
還有Encoder
和Decoder
類型。 它們包含Encode
和Decode
方法,它們分別對io.Reader
和io.Writer
進行字節流操作。 它們還允許使用這些流使用換行符分隔符對多個對象進行序列化或反序列化。
Marshal / Unmarshal函數和編碼器/解碼器類型的基本機制是相同的,它們都使用相同的內部encodeState.marshal
和decodeState.unmarshal
代碼路徑。 唯一真正的區別是它們為各種使用模式提供了替代訪問。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.