2 回答
TA贡献1862条经验 获得超6个赞
首先,我们必须了解编码过程实际上并不意味着它会翻译types
并返回 a 的 JSON 表示type
。为您提供 JSON 表示的过程称为编组过程,可以通过调用json.Marshal 函数来完成。
另一方面,Encoding过程意味着我们想要获取 any 的 JSON 编码type
并将其写入(编码)到实现 io.Writer 接口的流上。正如我们所见,func NewEncoder(w io.Writer) *Encoder
接收一个io.Writer
接口作为参数并返回一个*json.Encoder
对象。调用该方法时encoder.Encode()
,它会执行 Marshaling 过程,然后将结果写入我们在创建新 Encoder 对象时传递的 io.Writer 中。你可以在这里看到 json.Encoder.Encode() 的实现。
所以,如果你问是谁对 http 流进行编码处理,答案是http.ResponseWriter
. ResponseWriter 实现了 io.Writer 接口,在Encode()
调用该方法时,编码器会将对象编组为 JSON 编码表示,然后调用func Write([]byte) (int, error)
io.Writer 接口的一个契约方法,它会对http 流。
总之,我可以说 Marshal 和 Unmarshal 意味着我们想要获得任何类型的 JSON 表示,反之亦然。而编码意味着我们要进行编组处理,然后将结果写入(编码)到任何流对象。而解码意味着我们想要从任何流中获取(解码)一个 json 对象,然后执行 Unmarshaling 过程。
TA贡献1821条经验 获得超6个赞
json.Encoder
调用产生的json.NewEncoder
直接以 UTF-8 产生其输出。无需转换。(事实上,Go 没有与 UTF-8 编码的字节序列不同的文本数据表示形式——即使 astring
只是底层的不可变字节数组。)Go 使用术语编码进行序列化和解码用于反序列化,无论序列化形式是二进制形式还是文本形式。不要过多考虑术语——将encode和seralise视为同义词。
- 2 回答
- 0 关注
- 801 浏览
添加回答
举报