json - 将 JSON 数组值映射到结构特定变量

标签 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
    }
}

如何将“标签”数组 JSON 值链接到结构字段?

编辑:想法是像这样访问标签数组值 repository.Tags[0].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)
}

在 Playground 上试试:https://play.golang.org/p/ExwWhis0w0V

编码回 JSON 作为练习留给读者。

关于json - 将 JSON 数组值映射到结构特定变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49293842/

相关文章:

javascript - JSON 中的时间序列数据

.net - WCF 数据服务是否返回无效的 JSON?

Go Scanner 仍然返回 <nil>

multithreading - Golang 中的 channel 和 mutex 有什么区别?

javascript - 来自 python 对象的 JSON 编码?

java - 使用 jooq/postgresql 从 json 中提取键/值对 - java

javascript - 使用 jquery/json 填充表

go - 如何在 Golang 中声明一个常量映射?

google-app-engine - 生产中 App Engine 标准环境和柔性环境项目之间的路由

php - 长时间运行的 Golang 程序和资源(文件句柄、tcp 连接等)