将JSON数组值映射到struct特定变量

时间:2018-03-15 07:37:01

标签: json go

假设我有这个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

1 个答案:

答案 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留给读者练习。