如何初始化GO中嵌套的json结构中的值?

时间:2017-11-15 22:12:20

标签: json go data-structures

我现在有这个结构

type ServiceStruct struct {
      Name     string `json:"name"`
      DataStruct struct {
          ID    string `json:"id"`
          Size  string `json:"size"`
     }
}

但是我不知道如何为这个结构中的元素赋值。特别是ServiceStruct中的DataStruct

2 个答案:

答案 0 :(得分:1)

您可以使用匿名结构文字(需要复制粘贴DataStruct的类型),或使用=为各个字段指定值。

package main

import (
    "fmt"
)

type ServiceStruct struct {
    Name       string `json:"name"`
    DataStruct struct {
        ID   string `json:"id"`
        Size string `json:"size"`
    }
}

func main() {
    s1 := ServiceStruct{
        Name: "foo",
        DataStruct: struct {
            ID   string `json:"id"`
            Size string `json:"size"`
        }{
            ID:   "bar",
            Size: "100",
        },
    }

    s2 := ServiceStruct{
        Name: "foo",
    }
    s2.DataStruct.ID = "bar"
    s2.DataStruct.Size = "100"

    fmt.Println(s1)
    fmt.Println(s2)

    // Output:
    // {foo {bar 100}}
    // {foo {bar 100}}
}

或者,考虑给出DataStruct类型的名称,以便您可以在struct literal中引用它而不是copy-pasting(不推荐)。

答案 1 :(得分:1)

https://play.golang.org/p/GObadB9WyN

将JSON传递/解组到结构中的示例。这是我的主要用例,我希望它有用。

package main

import (
    "fmt"
    "encoding/json"
)

type ServiceStruct struct {
    Name     string `json:"name"`
    DataStruct struct {
        ID    string `json:"id"`
        Size  string `json:"size"`
    }
}

func main() {
    x := `{
        "Name": "Fido",
        "DataStruct": {
            "ID": "Dog",
            "Size": "Small"
        }
    }`

    ex := ServiceStruct{}
    json.Unmarshal([]byte(x), &ex)

    fmt.Println(ex.Name)
}