猿问

JSON解组后自动创建计算字段

简化示例


假设我有一个用于解组一些 json 的结构:


type DataEntry struct {

    FirstName string `json:"first"`

    LastName  string `json:"last"`

    FullName  string

}

我想填充该FullName属性的内容是FirstName + LastName.


我目前正在做的是为 DataEntry 定义一个方法,它执行以下类型的计算:


func (de *DataEntry) Compute() {

   de.FullName = de.FirstName + " " + de.LastName

}

并在从 JSON 填充结构体后调用 if:


// Grab data

request, _ := http.Get("http://........")

var entry DataEntry

dec := json.NewDecoder(request.Body)

dec.Decode(&entry)


// Compute the computed fields

entry.Compute()

有一个更好的方法吗?我可以使用 create my ownUnmarshalJSON并将其用作触发器来自动计算该FullName字段吗?


慕妹3146593
浏览 213回答 1
1回答

跃然一笑

在这种情况下,我只会FullName变成一种方法。但是,如果您真的需要这样做,只需创建一个包装器类型,它也是json.Unmarshaler:type DataEntryForJSON DataEntryfunc (d *DataEntryForJSON) UnmarshalJSON(b []byte) error {    if err := json.Unmarshal(b, (*DataEntry)(d)); err != nil {        return err    }    d.FullName = d.FirstName + " " + d.LastName    return nil}游乐场:http : //play.golang.org/p/g9BnytB5DG。
随时随地看视频慕课网APP

相关分类

Go
我要回答