json.Unmarshal的一些疑问

来源:31-10 商品分类的接口

城中城

2022-06-23

我定义的构造体

package response

type CategoryLevel3 struct {
	Id      int32  `json:"id"`
	Name    string `json:"name"`
	Level   int32  `json:"level"`
	IsTab   *bool  `json:"is_tab"`
	Pareent int32  `json:"parent"`
}

type CategoryLevel2 struct {
	Id          int32            `json:"id"`
	Name        string           `json:"name"`
	Pareent     int32            `json:"parent"`
	Level       int32            `json:"level"`
	IsTab       *bool            `json:"is_tab"`
	SubCategory []CategoryLevel3 `json:"sub_category"`
}

type CategoryLevel1 struct {
	Id          int32            `json:"id"`
	Name        string           `json:"name"`
	Pareent     int32            `json:"parent"`
	Level       int32            `json:"level"`
	IsTab       *bool            `json:"is_tab"`
	SubCategory []CategoryLevel2 `json:"sub_category"`
}

func List(ctx *gin.Context) {
	r, err := global.GoodsSrvClient.GetAllCategorysList(context.Background(), &empty.Empty{})
	if err != nil {
		api.HandleGrpcErrorToHttp(err, ctx)
		return
	}

	//data := make([]interface{}, 0)
	var data []response.CategoryLevel1
	err = json.Unmarshal([]byte(r.JsonData), &data) // // 将一个 json 字符串 转换为 二进制后  再映射到 struct
	if err != nil {
		zap.S().Errorw("[List] 查询 【分类列表】失败: ", err.Error())
	}

	ctx.JSON(http.StatusOK, data)
}

json.Unmarshal 我没有直接转换 而是先自己这了struct 然后将json数据赋值给 它

这里 有一些疑问 就是 python转换的时候 1级类目是没有父类目的 所以 转换json的时候 parent 为 null

但是 如果我在go中规定好 结构体 导致 因为 parent 为null 会强行有个默认值 0
而直接 用 json.Unmarshal 转换成 未知结构体 的话 却是
这个该如何解决

写回答

1回答

城中城

提问者

2022-06-23

已解决 

使用 指针即可   如果没有值  就为空

package response

type CategoryLevel3 struct {
	Id      int32  `json:"id"`
	Name    string `json:"name"`
	Pareent *int32 `json:"parent"`
	Level   int32  `json:"level"`
	IsTab   *bool  `json:"is_tab"`
}

type CategoryLevel2 struct {
	Id          int32            `json:"id"`
	Name        string           `json:"name"`
	Pareent     *int32           `json:"parent"`
	Level       int32            `json:"level"`
	IsTab       *bool            `json:"is_tab"`
	SubCategory []CategoryLevel3 `json:"sub_category"`
}

type CategoryLevel1 struct {
	Id          int32            `json:"id"`
	Name        string           `json:"name"`
	Pareent     *int32           `json:"parent"`
	Level       int32            `json:"level"`
	IsTab       *bool            `json:"is_tab"`
	SubCategory []CategoryLevel2 `json:"sub_category"`
}


0
1
bobby
这个也是常用的做法
2022-06-25
共1条回复

Go+Python打造电商系统 自研微服务框架 抓紧高薪机遇

快速转型Go工程师,成为具备双语言后端能力的开发者

510 学习 · 530 问题

查看课程