Go 解析json字符串:利用map or struct

当你遇到一串json字符串,想要解析到map或者自定义结构体中使用时,可以尝试以下方法:

1.解析到map:将目标json字符串转换成一个map[string]interface{}类型的数据

2.解析到struct结构体:定义一个结构体,将数据转换成对应的结构体对象,再获取相应的数据

package main

import (
	"fmt"
    "encoding/json"
)

// 1.解析到map:将目标json字符串转换成一个map[string]interface{}类型的数据
func UnmarshalJsonStr() {
	userInfo := `{"Name":"Bill","Age": 25}` // 示例:json格式字符串 (两边反引号`)

	m := make(map[string]interface{})
	if err := json.Unmarshal([]byte(userInfo), &m); err != nil {
		fmt.Println("JsonDecodeFun json.Unmarshal faild.")
		return
	}

	for k, v := range m {
		fmt.Println("key:", k, " value:", v) // key: Name  value: Bill	key: Age  value: 25
	}
}


// 2.解析到结构体:定义一个结构体,将数据转换成对应的结构体对象,再获取相应的数据
// 将JSON数据绑定到结构体中,结构体中字段名首字母要大写,不然不能正确绑定数据
type User struct {
	Name string `json:"name"` // `json:"xxx"`:在结构体和json字符串字段顺序不一致的情况下:json.unmarshal根据tag去寻找对应字段的内容
	Sex  string `json:"sex"`
	Age  int    `json:"age"`
}

func UnmarshalJsonStr1() {
	userInfo := `{
		"sex":"male",    // 此处sex和name故意与结构体字段顺序相反,证明解析时是通过tag解析对应字段信息的
		"name":"Bill",
		"age":25
	}`

	var u User
	err := json.Unmarshal([]byte(userInfo), &u) // 反序列化
	if err != nil {
		fmt.Println("err was %v", err)
	}

	fmt.Printf("%+v\n", u)            // {Name:Bill Sex:male Age:25}
	fmt.Println(u.Name, u.Sex, u.Age) // Bill male 25
}

func main() {
	UnmarshalJsonStr()
	UnmarshalJsonStr1()

	return
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值