Go 如何从结构中创建json对象

Go 如何从结构中创建json对象,go,Go,我是golang的新手,我想创建一个json对象,如下所示: { "name" : "animals", "children" : [ {"name":"dog", "value": 5}, {"name":"cat", "value": 4}, {"name":"fish", "value": 10} ] } 我想出的代码是: type Child struct { Name string

我是golang的新手,我想创建一个json对象,如下所示:

{
    "name" : "animals",
    "children" : [
        {"name":"dog", "value": 5},
        {"name":"cat", "value": 4},
        {"name":"fish", "value": 10}
    ]
}   
我想出的代码是:

type Child struct {
        Name string
        Value int
    }

type DataMap struct {
        Name string
        Children []Child
    }    
m := DataMap{"animals", [{"cat": 5 }, {"dog": 4}, {"fish":10}] }  
cj, _ := json.Marshal(m)
但我得到了一个错误:

   syntax error: unexpected {, expecting expression
理想情况下,我希望在循环中将
子项
切片附加到
数据映射
,但我不知道如何做。 谢谢你的提示

type DataMap struct {
        Name string
        Children []map[string]int
}
无需将
更改为

还要注意,错误是编译时错误,而不是运行时错误


当我的json太大时,我使用的工具是struct,我希望struct中包含所有字段的引号 下面的代码

{"name":"dog", "value": 5},
{"name":"cat", "value": 4},
{"name":"fish", "value": 10}
如下

{"name":"dog", "value": "5"},
{"name":"cat", "value": "4"},
{"name":"fish", "value": "10"}

我希望这对u

有帮助,因为您误解了结构初始化语法(因为有许多新的incomer),下面是一个示例:

package main

import (
    "fmt"
    "encoding/json"
)

type Child struct {
        Name string
        Value int
    }

type DataMap struct {
        Name string
        Children []Child
    }    

func main() {
    m := DataMap{"animals", []Child{{"cat", 5}, {"dog", 10 } } }  
    cj, _ := json.Marshal(m)

    fmt.Printf("%s", cj)
}

在循环中:

package main

import (
    "fmt"
    "encoding/json"
)

type Child struct {
        Name string
        Value int
    }

type DataMap struct {
        Name string
        Children []Child
    }    

func main() {
    m := DataMap{"animals", []Child{}}
    for _, item := range []Child{{"cat", 5}, {"dog", 10 }} {
       m.Children = append(m.Children, item)
    }
    cj, _ := json.Marshal(m)

    fmt.Printf("%s", cj)
}

在分配给
m
的行中,将所有
替换为
。这是一个普通的语法错误。仍然会得到相同的错误:和更多的普通语法错误。字段值应为
int
[…]
[]子项{…}
对不起,我需要值为
int
。请看更新后的问题。再看一眼。谢谢你的提示。