繁体   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