json - 序列化后的内容是否严格按照定义中的顺序使用encoding/json包?

标签 json go

我使用 encoding/json 来序列化结构。我对 json.Marshal 函数的输出感到困惑。序列化的字段内容是否严格按照struct定义中的顺序?

例如这是一个结构定义

type MyStruct struct {
    Field1  string
    Field2  string
}

输出可以是{"Field2":"field2","Field1":"field1"}吗?因为如果输出结构字段乱序,序列化内容的散列将是不确定的。

最佳答案

当前的实现是确定性的,例如对于结构,请参阅 https://golang.org/src/encoding/json/encode.go#L629它给出了结构顺序(并且映射是按排序的键)。

但由于文档保证这一点,您应该将其视为实现细节。

如果你想对输出进行哈希处理,你将面临更多问题,例如字符串中有几种等效的字符表示,而 JSON 没有 int 的概念(仅限 float )。这实际上取决于您尝试对该哈希执行的操作。

关于json - 序列化后的内容是否严格按照定义中的顺序使用encoding/json包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44755089/

相关文章:

javascript - insertAdjacentHTML 无法读取 null 的属性

javascript - 在同一个 Chrome 应用程序窗口中打开 HTML 文件?

file - 无法解析HCL文件中的变量

go - 如何在Godog中创建不同的套件并定义它们的执行顺序?

go - MCU支持go吗?

javascript - AJAX 请求返回带有属性的 JSON,而不是整个字符串作为一个值

java - Java 嵌入式桌面软件的 JSON ad-hoc 与 NoSQ 文档数据库

xml - Go:在用于 XML 解码的嵌套结构中提升字段

go - 提供动态长度响应数据

c# - 如何反序列化 JSON 数组并忽略根节点?