假设我有这个JSON结构:
{
"name":"repo",
"tags":["1.0","2.0","3.0"]
}
我想把它映射到这个Go结构:
type Repository struct {
Name string `json:"name"`
Tags []struct {
Tag string `json:"??"`
Sha256 string
}
}
如何将“tags”数组JSON值链接到struct字段?
编辑:想法是这样访问tags数组值
repository.Tags[0].Tag
。
答案 0 :(得分:6)
在Tag类型上实现json.Unmarshaler:
package main
import (
"encoding/json"
"log"
)
type Repository struct {
Name string
Tags []Tag
}
type Tag struct {
Tag string
Sha256 string
}
func (t *Tag) UnmarshalJSON(b []byte) error {
var s string
if err := json.Unmarshal(b, &s); err != nil {
return err
}
t.Tag = s
return nil
}
func main() {
b := []byte(`{ "name":"repo", "tags":["1.0","2.0","3.0"] }`)
var r Repository
err := json.Unmarshal(b, &r)
if err != nil {
log.Fatal(err)
}
log.Printf("%+v\n", r)
}
在操场上试试:https://play.golang.org/p/ExwWhis0w0V
Marshaling回JSON留给读者练习。