当前位置: 首页 > 知识库问答 >
问题:

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

申屠涛
2023-03-14

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

试图学习如何在golang中编写RESTFUL api,但不确定JSON“编码”和“编组”之间的区别是什么,或者它们是否相同?

共有3个答案

太叔英卫
2023-03-14

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

封送处理和编码当然是不同的概念,最好在维基百科(或其他地方)上解决。但简而言之,对象被封送到JSON编码的字符串中。

也不要让Golangjson。NewEncoder/(json.Encoder)。编码json。封送处理方法会让您感到困惑。它们都将对象封送为JSON编码的字符串。不同之处在于编码器,首先将对象封送到JSON编码的字符串,然后将该数据写入缓冲流(或Wikipedia上的数据缓冲区)。因此,编码器比简单的json使用更多的代码和内存开销。封送处理

您也可以在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响应,则可能需要使用缓冲流。但是,您也可以使用管道发送这个JSON编码的字符串,而无需缓冲流。

张亦
2023-03-14

一般来说,编码/解码JSON是指实际读取/写入字符串或二进制形式的字符数据的过程。封送/反封送是指将JSON类型从数据类型和基元映射到Go的过程。

例如,实际编码可以包括序列化unicode字符之类的内容。我认为它们有时可能在文档中互换使用,因为它们通常发生在同一步骤中。例如,Marshal函数将确定将某物封送到哪个JSON类型,然后将以字符串形式对其进行编码(如果是文本数据,则可能包括其他细节,如特殊字符)。

您可以查阅go json包文档,了解封送/解封送步骤如何工作的更多细节。

何涵畅
2023-03-14
  • 元帅=

封送和解封送将字符串转换为JSON,反之亦然。编码和解码将流转换为JSON,反之亦然。

下面的代码显示封送和解封的工作

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处理字符串或字节,如果您想读取或写入某个writer接口的任何数据,请使用encodes和decode。

 类似资料:
  • 解决编码问题的方法可能有很多: > 编码过滤器,如Spring MVC UTF-8编码 在Tomcat的server.xml中设置uriencoding=utf8,如http://struts.apache.org/release/2.1.x/docs/how-to-support-utf-8-uriencoding-with-tomcat.html。 它的输出是相同的。所以实际上,路径变量是用I

  • 问题内容: 我正在Go中编写一个应用程序,该应用程序使用编码/目标在节点之间通过UDP发送结构和切片。它工作正常,但我注意到encoding / json也具有类似的API。搜索并找到以下信息(https://golang.org/pkg/encoding/): gob软件包gob管理gob的流-编码器(发送器)和解码器(接收器)之间交换的二进制值。 json程序包json实现RFC 4627中定

  • 问题内容: 我一直在阅读nodebeginner, 并且遇到了以下两段代码。 第一个: 第二个: 我得到了他们应该做的事情,他们查询数据库以检索查询的答案。然后。 第一个应该是同步代码。第二个是异步代码。 这两部分之间的区别对我来说很模糊。输出是什么? 搜寻异步编程也无济于事。 问题答案: 区别在于,在第 一个示例中 ,程序将在第一行中阻塞。下一行()必须等待。 在 第二个示例中 ,将在处理查询时

  • 问题内容: Eclipse的Java编译器是否只是包裹该程序的同一个内核的包装器,还是完全独立的编译器?如果是后者,为什么还要重新发明轮子呢? 问题答案: Eclipse实现了自己的编译器,称为Java Eclipse编译器(ECJ)。 它不同于Sun JDK附带的编译器javac。一个显着的区别是Eclipse编译器使您可以运行实际上未正确编译的代码。如果永远不会运行带有错误的代码块,则您的程序

  • 问题内容: 在套接字编程中,AF_INET和PF_INET有什么区别? 我在和中使用AF_INET和PF_INET之间感到困惑。 另外,如何在字段中给出ip地址? 问题答案: Beej著名的网络编程指南给出了一个很好的解释: 在某些文档中,您会看到一个神秘的“ PF_INET”。这是在自然界中很少见到的怪异的以太兽,但我在这里还是要澄清一下。很久以前,有人认为一个地址族(“ AF_INET”中的“

  • 问题内容: 我一直在阅读nodebeginner,并且遇到了以下两段代码。 第一个: 第二个: 我得到了他们应该做的事情,他们查询数据库以检索查询的答案。然后。 第一个应该是同步代码。第二个是异步代码。 这两件作品之间的区别对我来说很模糊。输出是什么? 搜寻异步编程也没有帮助我。 问题答案: 区别在于,在第 一个示例中 ,程序将在第一行中阻塞。下一行()必须等待。 在 第二个示例中 ,将在处理查询