Golang JSON for Struct - 错误消息

我对 Golang 真的很陌生,我试图在发生错误时将值解析为我的 ErrorMessage 结构。


我有这个结构:


type ErrorMessage struct {

    Errors []struct {

        Code    string `json:"code"`

        Message string `json:"message"`

        Field   string `json:"field,omitempty"`

    } `json:"errors"`

    Meta struct {

        Status string `json:"status"`

    } `json:"meta"`

}

它被映射到像这样显示 JSON:


{

    "errors": [

        {

            "code": "short-code", 

            "message": "Wow, such bad!"

        },

        {

            "code": "other-code",

            "message": "OMG, very error!",

            "field": "This is the field"

        }

    ],

    "meta": {

        "status": "error"

    }

}

但是我不知道如何将控制器中的值解析到这个 Struct 中。对于一个基本的结构,我理解并有这样的东西: e := models.ErrorMessage{"Error", "404", "Field Missing"}


除了更复杂的结构之外,如何使用与上述类似的行?


喵喵时光机
浏览 221回答 2
2回答

ABOUTYOU

这里的问题是您使用匿名结构作为ErrorMessage. 例如,元素类型ErrorMessage.Errors是匿名结构。的类型ErrorMessage.Meta也是一个匿名结构。不幸的是,使用匿名结构类型初始化变量需要您复制匿名结构声明,有关示例和更多详细信息,请参阅此答案。我的建议是像这样命名你的匿名结构类型:type MyErr struct {    Code    string `json:"code"`    Message string `json:"message"`    Field   string `json:"field,omitempty"`}type MyMeta struct {    Status string `json:"status"`}type ErrorMessage struct {    Errors []MyErr `json:"errors"`    Meta   MyMeta  `json:"meta"`}然后你的任务变得非常简单:res := ErrorMessage{    Errors: []MyErr{        MyErr{            Code:    "short-code",            Message: "Wow, such bad!",        },        MyErr{            Code:    "other-code",            Message: "OMG, very error!",            Field:   "This is the field",        },    },    Meta: MyMeta{"error"},}data, err := json.MarshalIndent(&res, "", "  ")if err != nil {    panic(err)}fmt.Println(string(data))这将产生您想要的输出。在Go Playground上试一试。

慕妹3146593

如果将Error和Meta与内联结构分离为预定义的结构类型,则变得非常简单:type Error struct {     Code    string `json:"code"`     Message string `json:"message"`     Field   string `json:"field,omitempty"`}type Meta struct {    Status string `json:"status"`}type ErrorMessage struct {    Errors []Error `json:"errors"`    Meta Meta `json:"meta"`}msg := ErrorMessage {    Errors: []Error{        {Code: "f00", Message: "bar", Field: "wat"},    },    Meta: Meta{"WAT"},}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go