gpt4 book ai didi

json - go中json的值对象

转载 作者:IT王子 更新时间:2023-10-29 00:54:54 26 4
gpt4 key购买 nike

我有一个包含另一个结构作为值对象的结构。

type User struct {
Name string `json:"name"``
Email valueobject.Email `json:"email"`
}

valueobject.Email 如下所示:

type Email struct {
value string
}
func (e *Email) Value() string {
return e.Value
}

我希望值对象作为不可变对象(immutable对象),这里还有一个“工厂”方法,对于我的问题来说这不是必需的。

现在我想将 User 结构作为 json 返回,因此我使用

response := map[string]interface{}{"user": User}
json.NewEncoder(w).Encode(response)

结果是:

{
"user": {
"name": "John Doe",
"email": {
"Email: "johndoe@example.com"
}
}
}

但我想要一些链接:

{
"user": {
"name": "John Doe",
"email": "johndoe@example.com"
}
}

最佳答案

听起来你需要 valueobject.Email 来实现 json.Marshaler 接口(interface):

func (e *Email) MarshalJSON() ([]byte, error) {
return json.Marshal(e.Value())
}

这是实现您所要求的最低要求。通过实现 json.Marshaler 接口(interface),您可以自定义 json.Marshal 呈现您的值的方式。

另一种选择是将 Email 简化为 string 的包装器,而不是结构:

type Email string

func (e Email) Value() string {
return e
}

由于字符串已经由 json.Marshal 处理,因此它应该可以正常工作。

关于json - go中json的值对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53294768/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com