为了账号安全,请及时绑定邮箱和手机立即绑定

Golang中json编码和编组有什么区别

Golang中json编码和编组有什么区别

Go
万千封印 2021-11-15 15:53:13
JSON“编码/解码”和 JSON“编组/解组”有什么区别?试图学习如何在 golang 中编写 RESTFUL api,但不确定 JSON“编码”和“编组”之间的区别是什么,或者它们是否相同?
查看完整描述

3 回答

?
catspeake

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,如果您想读取或写入某个编写器接口的任何数据,请使用编码和解码。


查看完整回答
反对 回复 2021-11-15
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

通常,编码/解码JSON是指将字符数据实际读/写为字符串或二进制形式的过程。编组/解组是指将JSON类型从Go数据类型和原语映射到数据类型和原语的过程。

例如,实际编码可以包括序列化 unicode 字符之类的内容。我认为它们有时在文档中可以互换使用,因为它们通常出现在同一步骤中。例如,Marshal 函数将确定要将某些内容编组到哪种 JSON 类型,然后将其编码为字符串形式(如果是文本数据,则可能包括其他详细信息,例如特殊字符)。

您可以查阅 go json 包文档,了解有关编组/解组步骤如何工作的更多详细信息。


查看完整回答
反对 回复 2021-11-15
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

JSON“编码/解码”和 JSON“编组/解组”有什么区别?


编组编码当然是不同的概念,在维基百科(或其他地方)上更好地解决。但简而言之,对象被编组为 JSON 编码的字符串。

也不要让 Golang json.NewEncoder/(json.Encoder).Encodejson.Marshal方法混淆你。它们都将对象编组为 JSON 编码的字符串。不同之处在于编码器,首先将对象编组为 JSON 编码的字符串,然后将该数据写入缓冲区流(或维基百科上的数据缓冲区)。因此,编码器比简单的json.Marshal.

您还可以在 Golang 源代码中看到这一点:

通常,如果您需要将 JSON 编码的字符串发送到文件系统,或作为 HTTP 响应,您可能需要使用缓冲流。但是,您也可以使用pipe 在没有缓冲区流的情况下发送此 JSON 编码字符串。


查看完整回答
反对 回复 2021-11-15
  • 3 回答
  • 0 关注
  • 188 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信