2016-07-27 36 views
2

在Go的JSON包中,我看到有marshal,decode等功能。JSON的编组/解组,编码/解码和序列化/反序列化之间的关系和差异?

我认为decodemarshal相反,但后者意识到我可能是错的。

我认为我有最根本的问题是:

什么是JSON马歇尔/解组,编码/解码,和序列化/反序列化之间的关系和区别?

谢谢。

看到这里Why are json package's Decode and Marshal methods used here?

+0

@ Tim,为什么你还没有选择*答案呢?仍然不满意? – xpt

回答

2

一个例子,我会亲自说所有的这些术语是同义词虽然少了所以用编码/解码。在Go Marshal和Unmarshal碰巧是用来描述将json以字符串形式转换为对象的术语,反之亦然。然而,在C#中,这些相同的方法称为序列化和反序列化,据我所知,术语根本不在Go中(至少不在任何std库中)。

编码可以用作形容词来描述一些数据的存储格式,最常见的用法可能是字符编码(UTF-8)。在Go中,它还被用作名词来描述可以解组/编组json的对象。元帅/ Unmarshal总是用作动词,你在json上采取这种行动。

编码也用于Go中,指的是处理从一种编码到另一种编码转换的较大类别的包。

如果你告诉我你是编组,编组,反序列化或序列化一些对象或json,我会明白你的意思。如果你说你是json编码的对象,我会问一个澄清的问题。如果你说“响应是json编码”,我会明白你的意思,但我认为你用这些词而不是仅仅说“响应是json”是很奇怪的。希望这或多或少是你正在寻找的信息。

哦也,只是为了更清楚

Unmarshal == deserialize == decode

Marshal == serialize == encode

+0

谢谢。看到这里的例子http://stackoverflow.com/questions/38620151/why-are-json-packages-decode-and-marshal-methods-used-here – Tim

+0

@Tim我会看看,当我得到分钟。 – evanmcdonnal

2

encoding/json包,Marshal函数和逆Unmarshal函数返回和单个固定字节切片操作。它们将单个对象转换为字节,反之亦然。

还有EncoderDecoder类型。它们包含EncodeDecode方法,它们在字节流上操作,分别取io.Readerio.Writer。它们还允许多个对象被序列化或使用这些流的换行符分隔符进行反序列化。

Marshal/Unmarshal函数和编码器/解码器类型的基本机制是相同的,它们都使用相同的内部encodeState.marshaldecodeState.unmarshal代码路径。唯一真正的区别是它们为各种使用模式提供了替代访问。

+0

谢谢。在这里看到一个例子http://stackoverflow.com/questions/38620151/why-are-json-packages-decode-and-marshal-methods-used-here – Tim