首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Golang中解码为结构的JSON标记

在Golang中解码为结构的JSON标记
EN

Stack Overflow用户
提问于 2017-10-09 19:17:39
回答 3查看 1.8K关注 0票数 1

我有一个这样的JSON:

代码语言:javascript
运行
复制
{
"add":[{"id": "1234ABCD"}, {"id": "5678EFGH"}]
}

我有一个这样的结构:

代码语言:javascript
运行
复制
type ExampleStruct struct {
    Added   []string
}

我想知道我应该在我的结构中放什么JSON标签,这样在我做了JSON解码(这里没有显示的代码)之后,然后调用exampleStruct := &ExampleStructexampleStruct.Added,我怎么才能得到["1234ABCD", "5678EFGH"]呢?

我试过这样做:

代码语言:javascript
运行
复制
type ExampleStruct struct {
    Added   []string `json:"add"`
}

但它并没有起作用。

EN

回答 3

Stack Overflow用户

发布于 2017-10-09 19:39:26

使用映射切片而不是字符串,因为您有字符串的键值对。

代码语言:javascript
运行
复制
    type ExampleStruct struct {
        Added []map[string]string `json:"add"`
    }

下面是一个完整的示例:

代码语言:javascript
运行
复制
    package main

    import (
        "bytes"
        "encoding/json"
        "fmt"
    )

    func main() {
        const code = `{
    "add":[{"id": "1234ABCD"}]
    }`
        type ExampleStruct struct {
            Added []map[string]string `json:"add"`
        }
        var data ExampleStruct
        json.NewDecoder(bytes.NewReader([]byte(code))).Decode(&data)
        fmt.Println(data)
    }

编辑

因为您只想拥有映射的值,所以下面是一个完整的示例,其中Added是一个可以在ExampleStruct上调用的函数。它假设每个map只包含两个字符串(id和value):

代码语言:javascript
运行
复制
    package main

    import (
        "bytes"
        "encoding/json"
        "fmt"
    )

    func main() {
        const code = `{
    "add":[{"id": "1234ABCD"}, {"id": "5678EFGH"}]
    }`
        var data ExampleStruct
        json.NewDecoder(bytes.NewReader([]byte(code))).Decode(&data)
        fmt.Println(data)
        fmt.Println(data.Added())
    }

    type ExampleStruct struct {
        Add []map[string]string `json:"add"`
    }

    func (e ExampleStruct) Added() []string {
        values := make([]string, len(e.Add))
        for i := range e.Add {
            for _, v := range e.Add[i] {
                values[i] = v
            }
        }
        return values
    }
票数 1
EN

Stack Overflow用户

发布于 2017-10-09 19:22:50

您是否尝试过通过添加'id‘来获取它的密钥,如下所示

类型添加结构{ ExampleStruct []string json:"add.id" }

票数 0
EN

Stack Overflow用户

发布于 2017-10-10 01:27:16

您需要以这样的方式安排json:结构的元素应该可以直接访问(而不是过度设计)。

代码语言:javascript
运行
复制
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
)

type ExampleStruct struct {
    Add []struct {
        ID string `json:"id"`
    } `json:"add"`
}

func main() {

    const code = `{
     "add":[{"id": "1234ABCD"}, {"id": "5678EFGH"}]
    }`

     var data ExampleStruct
     json.NewDecoder(bytes.NewReader([]byte(code))).Decode(&data)
     fmt.Println(data)           //Get all ids: {[{1234ABCD} {5678EFGH}]}
     fmt.Println(data.Add[0].ID) //Get 1st ID : 1234ABCD
     fmt.Println(data.Add[1].ID) //Get 2nd ID ... and so on.: 5678EFGH
}

你可以在这里找到代码https://play.golang.org/p/7tD4fLBewp

如果一个数组中有多个ids,那么您还可以编写一个函数来循环遍历该数组,即data.Add,并从中获取If。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46645172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档