13.4 第三方API数据格式的解析技巧

一、未知json整理

func parseNLP() {
	res := `{
			"data": [{
				"synonym": "",
				"weight": "0.6",
				"word": "真丝",
				"tag": "材质"
			},
			{
				"synonym": "",
				"weight": "0.8",
				"word": "韩都衣舍",
				"tag": "品牌"
			},
			{
				"synonym": "",
				"weight": "1.0",
				"word": "连衣裙",
				"tag": "品类"
			}]
		}`

	// 不想对这个数据类型新建样式,就用map接收,因为名字可以确认是字符串,内容不确定格式,就用interface{}接收
	// m := make(map[string]interface{})
	// err := json.Unmarshal([]byte(res), &m)
	// if err != nil {
	// 	panic(err)
	// }
	// // 输出
	// fmt.Printf("%+v\n", m["data"])
	//
	// // 获取第二个值,因为map,所以要用切片去取,给指明type(切片)
	// fmt.Printf("%+v\n", m["data"].([]interface{})[2])
	//
	// fmt.Printf("%+v\n", m["data"].([]interface{})[2].(map[string]interface{})["synonym"])

	// 方法内定义数据类型
	m := struct {
		Data []struct {
			Synonym string `json:"synonym"`
			Weight  string `json:"weight"`
			Word    string `json:"word"`
			Tag     string `json:"tag"`
		} `json:"data"`
	}{}

	err := json.Unmarshal([]byte(res), &m)
	if err != nil {
		panic(err)
	}
	fmt.Printf("%+v\n", m)
}

Last updated

Was this helpful?