go解析json,不区分json字段的大小写

有个需求,客户端传来的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}
}

posted @ 2025-04-29 13:25  朝阳1  阅读(28)  评论(0)    收藏  举报