我用来encoding/json序列化结构。我对函数的输出感到困惑json.Marshal。序列化的字段内容是否严格遵循结构体定义中的顺序?
例如这是一个结构体定义
type MyStruct struct {
Field1 string
Field2 string
}
Run Code Online (Sandbox Code Playgroud)
输出可以是吗{"Field2":"field2","Field1":"field1"}?因为如果输出结构体字段乱序,则序列化内容的哈希值将是不确定的。
当前的实现是确定性的,例如,对于结构,请参阅https://golang.org/src/encoding/json/encode.go#L629,它给出了结构顺序(并且映射按排序键排序)。
但由于文档不能保证这一点,因此您应该将其视为实现细节。
如果你想对输出进行哈希处理,你将面临更多问题,例如,字符串中的字符有几种等效的表示形式,而 JSON 没有 int 的概念(仅浮点数)。这实际上取决于您尝试使用该哈希做什么。