go语言中结构体,map与json和之间的转换需要注意的(持续更新)

type IT struct {
	Company string `json:"comp"` //在json中的别名
	Subjects []string
	IsOk bool `json:",string"` //在json中 将bool类型转换为string类型
	Price float64 `json:"-"` //在json中不输出该字段
}

结构体转json

//结构体转json
i := new(IT)
i.Company = "KingSoft"
i.Subjects = []string{"A","B","C"}
i.IsOk = true
i.Price = 123
d1,err := json.Marshal(i)
if err != nil {
	fmt.Println(err)
	return
}
fmt.Println(string(d1)) 
//输出{"company":"KingSoft","Subjects":["A","B","C"],"IsOk":"true"}

map转json

m1 := make(map[string]interface{})
m1["company"] = "KingSoft"
m1["IsOk"] = true
m1["Subjects"] = []string{"A","B","C"}
d2,err := json.Marshal(m1)
fmt.Println(string(d2))
//输出{"IsOk":true,"Subjects":["A","B","C"],"company":"KingSoft"}

json转结构体

i := new(IT) //new一个结构体出来,返回的是指针类型
str := `{"company":"KingSoft","Subjects":["A","B","C"],"IsOk":"true"}`
json.Unmarshal([]byte(str),i)
fmt.Printf("%+v",i)
//输出是 &{Company:KingSoft Subjects:[A B C] IsOk:true Price:0}

json转map

str := `{"IsOk":true,"Subjects":["A","B","C"],"company":"KingSoft"}`
m := make(map[string]interface{})
json.Unmarshal([]byte(str),&m)
fmt.Println(m)
//输出是 map[IsOk:true Subjects:[A B C] company:KingSoft]

因为上面定义的map的value是  interface{}  类型的,所以你是无法直接通过  reflect.TypeOf()  获取的类型

但是可以通过类型断言来获取它类型

for k,v := range m { //m是map
	switch v.(type) {
	case string:
		fmt.Printf("m[%s]的value是string类型的\n",k)
	case int:
		fmt.Printf("m[%s]的value是int类型的\n",k)
	case bool:
		fmt.Printf("m[%s]的value是bool类型的\n",k)
	case []string:
		fmt.Printf("m[%s]的value是[]string类型的\n",k)
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值