有个需求,客户端传来的json的key,可能是password也可能是Password
package main
import (
"encoding/json"
"fmt"
"strings"
"github.com/mitchellh/mapstructure"
)
type LiveData struct {
Password string `json:"password" validate:"required"`
}
func main() {
// 示例JSON,键为"Password"(首字母大写)
jsonStr := `{"Password":"secret"}`
// 解析JSON到map
var jsonMap map[string]interface{}
if err := json.Unmarshal([]byte(jsonStr), &jsonMap); err != nil {
panic(err)
}
// 配置mapstructure解码器
config := &mapstructure.DecoderConfig{
Result: &LiveData{}, // 目标结构体实例
TagName: "json", // 使用json标签
MatchName: func(jsonKey, tagName string) bool {
return strings.EqualFold(jsonKey, tagName) // 不区分大小写
},
}
decoder, err := mapstructure.NewDecoder(config)
if err != nil {
panic(err)
}
var liveData LiveData
if err := decoder.Decode(jsonMap); err != nil {
panic(err)
}
fmt.Printf("解析结果: %+v\n", liveData) // 输出: {Password:secret}
}