```
func main() {
src := `{"iss":"magic-ios-1.0.0","iat":1487000471,"jti":"4861ed10","rbd":"dbac2c5f","uri":"/auth/hello","ttu":""}`
var params interface{}
err := json.Unmarshal([]byte(src), ¶ms)
if err != nil {
fmt.Printf("%v\n", err)
return
}
p, _ := json.Marshal(params)
fmt.Printf("%v, %s\n", params, p)
}
```
问题描述:
1. json原始字符串
```
src := {"iss":"magic-ios-1.0.0","iat":1487000471,"jti":"4861ed10","rbd":"dbac2c5f","uri":"/auth
/hello","ttu":""}
```
2. 经过json.Unmarshal,再次 json.Marshal的输出结果与原始字符串不一致,如下:
```
map[iss:magic-ios-1.0.0 iat:1.487000471e+09 jti:4861ed10 rbd:dbac2c5f uri:/auth/hello ttu:], {"iat":1.487000471e+09,"iss":"magic-ios-1.0.0","jti":"4861ed10","rbd":"dbac2c5f","ttu":"","uri":"/auth/hello"}
```
有人遇到这种问题嘛?json串字段顺序变了,原始字符串md5值与一次转换后的字符串md5值就不一致了。
首先,谢谢你提供的方法。但是这个方法无法满足我们的需求。我们的需求是对http 请求体做一个md5,然后将md5值传到服务器端,服务器端会对请求体做md5,然后和客户端传递上来的md5进行比较。由于每个接口的请求body部分的内容是变化的,所以每个接口都定义这样一种struct感觉会很麻烦。
#2
更多评论
没有指定结构体,会按照字母排序输出的,可以像下面这样对json指定接收结构体,
```
type Ha struct {
Iss int `json:"iss"`
Iat int `json:"iat"`
}
func main() {
src := `{"iss":148700047,"iat":1487000471}`
var params Ha
err := json.Unmarshal([]byte(src), &params)
if err != nil {
fmt.Printf("%v\n", err)
return
}
p, _ := json.Marshal(params)
fmt.Printf("%v\n", params)
fmt.Printf("%s\n", p)
}
```
#1
![QQ截图20170501230422.png](http://studygolang.qiniudn.com/170501/7f78e389b01db522ccf6291b845773f7.png)
http://open.taobao.com/docs/doc.htm?spm=a219a.7386797.0.0.9u6yb5&treeId=1&articleId=101617&docType=1
#3