3 回答
TA贡献1111条经验 获得超0个赞
元帅 => 字符串
编码 => 流
Marshal 和 Unmarshal 将字符串转换为 JSON,反之亦然。编码和解码将流转换为 JSON,反之亦然。
下面的代码显示了 marshal 和 unmarshal 的工作
type Person struct {
First string
Last string
}
func main() {
/* This will marshal the JSON into []bytes */
p1 := Person{"alice", "bob"}
bs, _ := json.Marshal(p1)
fmt.Println(string(bs))
/* This will unmarshal the JSON from []bytes */
var p2 Person
bs = []byte(`{"First":"alice","Last":"bob"}`)
json.Unmarshal(bs, &p2)
fmt.Println(p2)
}
编码器和解码器将结构写入流的切片或从流的切片中读取数据并将其转换为结构。在内部,它还实现了 marshal 方法。唯一的区别是,如果您想处理字符串或字节,请使用 marshal,如果您想读取或写入某个编写器接口的任何数据,请使用编码和解码。
TA贡献1770条经验 获得超3个赞
JSON“编码/解码”和 JSON“编组/解组”有什么区别?
编组和编码当然是不同的概念,在维基百科(或其他地方)上更好地解决。但简而言之,对象被编组为 JSON 编码的字符串。
也不要让 Golang json.NewEncoder
/(json.Encoder).Encode
和json.Marshal
方法混淆你。它们都将对象编组为 JSON 编码的字符串。不同之处在于编码器,首先将对象编组为 JSON 编码的字符串,然后将该数据写入缓冲区流(或维基百科上的数据缓冲区)。因此,编码器比简单的json.Marshal
.
您还可以在 Golang 源代码中看到这一点:
元帅:https : //golang.org/src/encoding/json/encode.go? s = 6458: 6501#L148
编码:https ://golang.org/src/encoding/json/stream.go ? s = 5070:5117#L191
通常,如果您需要将 JSON 编码的字符串发送到文件系统,或作为 HTTP 响应,您可能需要使用缓冲流。但是,您也可以使用pipe 在没有缓冲区流的情况下发送此 JSON 编码字符串。
- 3 回答
- 0 关注
- 188 浏览
添加回答
举报