Go语言处理JSON之――利用Marshal生成json字符串

匿名 (未验证) 提交于 2019-12-03 00:09:02

利用Go语言内置的encodong/json标准库,我们可以轻松地生成和解析json格式的数据。

func Marshal(v interface{}) ([]byte, error) 

从返回值我们可以看到,该函数有两个返回值,一个是传入参数v的json编码,类型为[]byte,另外一个就是error。
官方文档提供了一个例子:

package main  import ( 	"fmt" 	"encoding/json" )  type ColorGroup struct { 	ID     int 	Name   string 	Colors []string }  func main() { 	group := ColorGroup { 	    ID:     1, 	    Name:   "Reds", 	    Colors: []string{"Crimson", "Red", "Ruby", "Maroon"}, 	}  	b, err := json.Marshal(group) 	if err != nil { 	    fmt.Println("error:", err) 	} 	 	fmt.Println(string(b)) } 

输出:

{"ID":1,"Name":"Reds","Colors":["Crimson","Red","Ruby","Maroon"]} 

大家看到了,我们定义的结构体中的变量名都是大写,这是怎么回事呢?原来只有大写的变量,才能导出。
把上面的代码稍微改变一下,将name变成小写,看看会发生什么。

package main  import ( 	"fmt" 	"encoding/json" )  type ColorGroup struct { 	ID     int 	name   string  //这里的name为小写 	Colors []string }  func main() { 	group := ColorGroup { 	    ID:     1, 	    name:   "Reds", //这里的name为小写 	    Colors: []string{"Crimson", "Red", "Ruby", "Maroon"}, 	}  	b, err := json.Marshal(group) 	if err != nil { 	    fmt.Println("error:", err) 	} 	 	fmt.Println(string(b)) } 

输出:

{"ID":1,"Colors":["Crimson","Red","Ruby","Maroon"]} 

为了在输出的json字符串中用小写表示,该怎么处理呢?go也提供了办法。
就是给字段加标签:
举例:

type ColorGroup struct { 	ID     int 	Name   string  `json:"name"` 	Colors []string } 

我们在Name后面加了字段标签,注意是反单引号包起来的,就是键盘上Tab键的上方的那个键。
这个字段标签的意思是,导出的时候,用name名。

输出结果:

{"ID":1,"name":"Reds","Colors":["Crimson","Red","Ruby","Maroon"]} 

这字段标签还有其他的用法,比如:

type ColorGroup struct { 	ID     int 	Name   string  `json:"-"` 	Colors []string } 

这时候的输出结果就为:

{"ID":1,"Colors":["Crimson","Red","Ruby","Maroon"]} 

// 字段被本包忽略
Field int json:"-"
// 字段在json里的键为"myName"
Field int json:"myName"

详细的用法可以参考go官方文档,这里就不一一列举了。
https://studygolang.com/pkgdoc
查看encoding/json

最后,我们看一个具体的实例:

{     "first fruit":     {         "describe":"an apple",         "icon":"appleIcon",         "name":"apple"     },     "second fruit":     {         "describe":"an orange",         "icon":"orangeIcon",         "name":"orange"     },     "three fruit array":     [         "eat 0",         "eat 1",         "eat 2",         "eat 3",         "eat 4"     ] } 

比如,我们要生成这样一个json字符串,go语言该怎么写呢?

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!