为了账号安全,请及时绑定邮箱和手机立即绑定

【九月打卡】第16天 go语言json数据

标签:
Go

课程名称GO开发工程师

课程章节:8-2: json数据格式的处理;8-3第三方API数据格式的解析技巧

课程讲师ccmouse

课程内容
1.序列化

// 序列化
func marshal() {
	o := Order{
		ID:         "1234",
		Quantity:   3,
		TotalPrice: 30,
		Item: []OrderItem{
			{
				ID:    "item_1",
				Name:  "learn go",
				Price: 10,
			},
			{
				ID:    "item_2",
				Name:  "interview",
				Price: 5,
			},
		},
	}
	b, err := json.Marshal(o)
	if err != nil {
		panic(err)
	}
	fmt.Printf("%s\n\n", b)
}
  1. 反序列化
// 反序列化
func unmarshal() {
	s := `{"id":"1234","Item":[{"id":"item_1","name":"learn go","price":10},{"id":"item_2"
,"name":"interview","price":5}],"quantity":3,"totalPrice":30}
`
	var o Order
	err := json.Unmarshal([]byte(s), &o) // 将序列化的值传给o
	if err != nil {
		panic(err)
	}
	fmt.Printf("%+v\n", o)
}
  1. 第三方json解析技巧
func parseNLP() {
	res := `{
  "data": [
    {
      "synonym": "",
      "weight": "0.6",
      "word": "真丝",
      "tag": "材质"
    },
    {
      "synonym": "",
      "weight": "0.8",
      "word": "韩都衣舍",
      "tag": "品牌"
    },
    {
      "synonym": "连身裙,联衣裙",
      "weight": "1.0",
      "word": "连衣裙",
      "tag": "品类"
    }
  ]
}`
	//方式一:使用map定义json结构
	// json 的key是string,值是不定的(string、int、struct...)
	m := make(map[string]interface{})
	err := json.Unmarshal([]byte(res), &m)
	if err != nil {
		panic(err)
	}
	//fmt.Printf("%+v\n", m)
	// 使用 type assertion 告知类型,取值不方便
	fmt.Printf("%+v\n", m["data"].([]interface{})[2].(map[string]interface{})["synonym"])

	//	方式二: 使用结构体定义
	m2 := struct {
		Data []struct {
			Synonym string `json:"synonym"`
		} `json:"data"` // 注意要加上data的tag
	}{}
	err2 := json.Unmarshal([]byte(res), &m2)
	if err2 != nil {
		panic(err2)
	}
	fmt.Printf("%+v\n", m2.Data[2].Synonym)

}

课程收获

  • 遵循通用json传输格式,给struct加tag,表示json的key
  • 在取值时使用struct定义json结构比map更便捷
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消