你好,我想将一个 json 传递给一个结构,以防我有实体和值对象,并且在我所有的值对象中我有方法:UnmarshalText、MarshalJSON 将我的 struct 转换为 json 工作正常,但我无法想象如何从 json 转换为 struct 在我从我的个人实体数据库中获取数据的场景中,我需要将此数据转换为要返回的结构人
for rows.Next() {
var id, firstName, lastName, email, password string
var createdAt, updatedAt time.Time
err = rows.Scan(&id, &firstName, &lastName, &email, &password,
&createdAt, updatedAt)
if err != nil {
log.Printf("Failed to build item: %v\n", err)
return persons, err
}
}
到目前为止,我在原始数据中有我的字段,我需要将其转换为我的结构人,即:
type Person struct {
Id string `json:"id"`
Name Name `json:"name"`
Email Email `json:"email"`
Password Password `json:"-"`
Created time.Time `json:"createdAt"`
Updated time.Time `json:"updatedAt"`
}
正如我之前所说的,我所有的对象值,如电子邮件、姓名、密码 有私有字段,我在其中有 unmarshal 和 marshal 方法 我想知道是否有任何方法可以将 json 传递给我的 struct Person
电子邮件结构:
type Email struct {
value string
}
密码结构:
type Password struct {
value string
}
名称结构:
type Name struct {
firstName string
lastName string
}
在我所有的“值对象结构中,我有两种方法”:
//name
func (n *Name) MarshalJSON() ([]byte, error) {
return json.Marshal(struct {
FirstName string `json:"firstName"`
LastName string `json:"lastName"`
}{
FirstName: n.FirstName(),
LastName: n.LastName(),
})
}
func (n *Name) UnmarshalText(f []byte, l []byte) error {
var err error
*n, err = NewName(string(f), string(l))
return err
}
//password
func (n *Password) UnmarshalText(d []byte) error {
var err error
*n, err = NewPassword(string(d))
return err
}
func (e *Password) MarshalJSON() ([]byte, error) {
return json.Marshal(e.Value())
}
//email
func (e *Email) MarshalJSON() ([]byte, error) {
return json.Marshal(e.Value())
}
func (n *Email) UnmarshalText(d []byte) error {
var err error
*n, err = NewEmail(string(d))
return err
}