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"` }
012022-06-25
相似问题
看完这节课的一些疑问
回答 1
关于 空接口的一些疑问
回答 1
关于Python Typing的一些问题
回答 1
中级Python开发后续的发展问题
回答 2
python grpc超时机制有些疑问
回答 1