Go map 按字典升序转 JSON 后 MD5 与 PHP 不一致,如何解决?
go map 按字典升序后转 json md5 与 php 不一致问题
在 go 中,使用 map 类型的有序特性进行排序后,转化为 json 字符串并计算 md5 值时,与 php 的计算结果不一致。如何解决此问题?
解决方案:
已在 [wp.hellocode.name](https://wp.hellocode.name/?p=...) 解决了此问题。
原理:
- 使用 encoding/json 包时,默认会对特殊字符进行转义。这会导致排序后的 json 字符串与 php 的排序结果不同。
- 要解决此问题,需要在使用 json 编码器时明确指定 setescapehtml(false),禁止特殊字符转义。
- 修改后的代码如下:
// ... byteBuf := bytes.NewBuffer([]byte{}) encoder := json.NewEncoder(byteBuf) // 特殊字符不转义 encoder.SetEscapeHTML(false) err := encoder.Encode(params)
以上就是Go map 按字典升序转 JSON 后 MD5 与 PHP 不一致,如何解决?的详细内容,更多请关注其它相关文章!