想要使用 Json.Marshal() 函数需要我们先引入 enCoding/Json 包,示例代码如下:
package mainimport ( "enCoding/Json" "fmt")func main() { // 声明技能结构体 type Skill struct { name string Level int } // 声明角色结构体 type Actor struct { name string Age int Skills []Skill } // 填充基本角色数据 a := Actor{ name: "cow boy",Age: 37,Skills: []Skill{ {name: "Roll and roll",Level: 1},{name: "Flash your dog eye",Level: 2},{name: "Time to have Lunch",Level: 3},},} result,err := Json.Marshal(a) if err != nil { fmt.Println(err) } JsonStringData := string(result) fmt.Println(JsonStringData)}运行结果如下:
{
"name":"cow boy",
"Age":37,
"Skills":[
{
"name":"Roll and roll",
"Level":1
},
{
"name":"Flash your dog eye",
"Level":2
},
{
"name":"Time to have Lunch",
"Level":3
}
]
}
提示:为了便于查看这里将输出结果做了格式化处理。
在转换 JsON 格式时,JsON 的各个字段名称默认使用结构体的名称,如果想要指定为其它的名称我们可以在声明结构体时添加一个`Json:" "`
标签,在" "
中可以填入我们想要的内容,代码如下所示:package mainimport ( "enCoding/Json" "fmt")func main() { // 声明技能结构体 type Skill struct { name string `Json:"name"` Level int `Json:"level"` } // 声明角色结构体 type Actor struct { name string Age int Skills []Skill } // 填充基本角色数据 a := Actor{ name: "cow boy",err := Json.Marshal(a) if err != nil { fmt.Println(err) } JsonStringData := string(result) fmt.Println(JsonStringData)}运行结果如下:
{
"name":"cow boy",
"Skills":[
{
"name":"Roll and roll",
"level":1
},
{
"name":"Flash your dog eye",
"level":2
},
{
"name":"Time to have Lunch",
"level":3
}
]
}
我们还可以在上面的标签的
" "
中加入 omitempty(使用逗号,
与前面的内容分隔),来过滤掉转换的 JsON 格式中的空值,如下所示:package mainimport ( "enCoding/Json" "fmt")func main() { // 声明技能结构体 type Skill struct { name string `Json:"name,omitempty"` Level int `Json:"level"` } // 声明角色结构体 type Actor struct { name string Age int Skills []Skill } // 填充基本角色数据 a := Actor{ name: "cow boy",Skills: []Skill{ {name: "",{name: "Flash your dog eye"},
"Skills":[
{
"level":1
},
"level":0
},
"level":3
}
]
}通过对比 Skill 结构体的 name 和 Level 字段可以看出,name 字段的空值被忽略了,而 Level 字段则没有。`Json:" "`
标签的使用总结为以下几点:FIEldname int `Json:"-"`
:表示该字段被本包忽略;FIEldname int `Json:"myname"`
:表示该字段在 JsON 里使用“myname”作为键名;FIEldname int `Json:"myname,omitempty"`
:表示该字段在 JsON 里使用“myname”作为键名,并且如果该字段为空时将其省略掉;FIEldname int `Json:",omitempty"`
:该字段在Json里的键名使用默认值,但如果该字段为空时会被省略掉,注意 omitempty 前面的逗号不能省略。 总结以上是内存溢出为你收集整理的Go语言将结构体数据保存为JSON格式数据全部内容,希望文章能够帮你解决Go语言将结构体数据保存为JSON格式数据所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)