亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Golang > 正文

在Go語言中使用JSON的方法

2020-04-01 18:58:53
字體:
來源:轉載
供稿:網友

Encode

將一個對象編碼成JSON數據,接受一個interface{}對象,返回[]byte和error:

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

Marshal函數將會遞歸遍歷整個對象,依次按成員類型對這個對象進行編碼,類型轉換規則如下:

bool類型 轉換為JSON的Boolean
整數,浮點數等數值類型 轉換為JSON的Number
string 轉換為JSON的字符串(帶""引號)
struct 轉換為JSON的Object,再根據各個成員的類型遞歸打包
數組或切片 轉換為JSON的Array
[]byte 會先進行base64編碼然后轉換為JSON字符串
map 轉換為JSON的Object,key必須是string
interface{} 按照內部的實際類型進行轉換
nil 轉為JSON的null
channel,func等類型 會返回UnsupportedTypeError

type ColorGroup struct {  ID  int  Name string  Colors []string } group := ColorGroup{  ID:  1,  Name: "Reds",  Colors: []string{"Crimson", "Red", "Ruby", "Maroon"}, } b, err := json.Marshal(group) if err != nil {  fmt.Println("error:", err) } os.Stdout.Write(b) Output: {"ID":1,"Name":"Reds","Colors":["Crimson","Red","Ruby","Maroon"]} 

Decode

將JSON數據解碼

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

類型轉換規則和上面的規則類似

var jsonBlob = []byte(`[  {"Name": "Platypus", "Order": "Monotremata"},  {"Name": "Quoll", "Order": "Dasyuromorphia"} ]`) type Animal struct {  Name string  Order string } var animals []Animal err := json.Unmarshal(jsonBlob, &animals) if err != nil {  fmt.Println("error:", err) } fmt.Printf("%+v", animals) Output: [{Name:Platypus Order:Monotremata} {Name:Quoll Order:Dasyuromorphia}]

結構體

結構體必須是大寫字母開頭的成員才會被JSON處理到,小寫字母開頭的成員不會有影響。

Mashal時,結構體的成員變量名將會直接作為JSON Object的key打包成JSON;Unmashal時,會自動匹配對應的變量名進行賦值,大小寫不敏感。

Unmarshal時,如果JSON中有多余的字段,會被直接拋棄掉;如果JSON缺少某個字段,則直接忽略不對結構體中變量賦值,不會報錯。

type Message struct {  Name string  Body string  Time int64  inner string } var m = Message{  Name: "Alice",  Body: "Hello",  Time: 1294706395881547000,  inner: "ok", } b := []byte(`{"nAmE":"Bob","Food":"Pickle", "inner":"changed"}`) err := json.Unmarshal(b, &m) if err != nil {  fmt.Printf(err.Error())  return } fmt.Printf("%v", m) Output: {Bob Hello 1294706395881547000 ok} 

 StructTag

如果希望手動配置結構體的成員和JSON字段的對應關系,可以在定義結構體的時候給成員打標簽:

使用omitempty熟悉,如果該字段為nil或0值(數字0,字符串"",空數組[]等),則打包的JSON結果不會有這個字段。

type Message struct {  Name string `json:"msg_name"`  // 對應JSON的msg_name  Body string `json:"body,omitempty"` // 如果為空置則忽略字段  Time int64 `json:"-"`    // 直接忽略字段 } var m = Message{  Name: "Alice",  Body: "",  Time: 1294706395881547000, } data, err := json.Marshal(m) if err != nil {  fmt.Printf(err.Error())  return } fmt.Println(string(data)) Output: {"msg_name":"Alice"} 

更靈活地使用JSON

使用json.RawMessage

json.RawMessage其實就是[]byte類型的重定義??梢赃M行強制類型轉換。

現在有這么一種場景,結構體中的其中一個字段的格式是未知的:

type Command struct {  ID int  Cmd string  Args *json.RawMessage }

使用json.RawMessage的話,Args字段在Unmarshal時不會被解析,直接將字節數據賦值給Args。我們可以能先解包第一層的JSON數據,然后根據Cmd的值,再確定Args的具體類型進行第二次Unmarshal。

這里要注意的是,一定要使用指針類型*json.RawMessage,否則在Args會被認為是[]byte類型,在打包時會被打包成base64編碼的字符串。

使用interface{}

interface{}類型在Unmarshal時,會自動將JSON轉換為對應的數據類型:

JSON的boolean 轉換為boolJSON的數值 轉換為float64JSON的字符串 轉換為stringJSON的Array 轉換為[]interface{}JSON的Object 轉換為map[string]interface{}

JSON的null 轉換為nil

需要注意的有兩個。一個是所有的JSON數值自動轉換為float64類型,使用時需要再手動轉換為需要的int,int64等類型。第二個是JSON的object自動轉換為map[string]interface{}類型,訪問時直接用JSON Object的字段名作為key進行訪問。再不知道JSON數據的格式時,可以使用interface{}。

自定義類型

如果希望自己定義對象的打包解包方式,可以實現以下的接口:

type Marshaler interface {  MarshalJSON() ([]byte, error) } type Unmarshaler interface {  UnmarshalJSON([]byte) error } 

實現該接口的對象需要將自己的數據打包和解包。如果實現了該接口,json在打包解包時則會調用自定義的方法,不再對該對象進行其他處理。

總結

以上所述是小編給大家介紹的在Go語言中使用JSON的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人激情视频在线观看| 国产精品久久国产精品99gif| 国产精品小说在线| 亚洲美女中文字幕| 色综合伊人色综合网| 日本三级久久久| 色悠久久久久综合先锋影音下载| 国产在线日韩在线| 伊人成人开心激情综合网| 黑人欧美xxxx| 91中文在线观看| 夜夜躁日日躁狠狠久久88av| 亚洲国产精品久久久久久| 久久久久久久久久av| 欧美精品videos性欧美| 午夜美女久久久久爽久久| 精品亚洲va在线va天堂资源站| 懂色av中文一区二区三区天美| 国产精品1234| 91av福利视频| 一区二区三区视频免费| 亚洲人成网站999久久久综合| 日韩毛片在线看| 亚洲精品国产suv| 中文字幕少妇一区二区三区| 国产精品吹潮在线观看| 综合欧美国产视频二区| 成人97在线观看视频| 欧美一级大胆视频| 亚洲视频axxx| 久久精品国产免费观看| 欧美日韩精品在线观看| 日韩电影中文字幕在线观看| 精品久久久久久电影| 国产精品久久久一区| 国产丝袜视频一区| 91在线观看免费| 久久综合88中文色鬼| 日韩精品极品视频| 欧美日韩一区二区三区| 国产精品久久久久久久久免费看| 中文字幕日韩av综合精品| 久久久精品亚洲| 国产成人jvid在线播放| 91免费视频网站| 国产精品中文字幕久久久| 久久躁日日躁aaaaxxxx| 亚洲一区二区三区四区在线播放| 色诱女教师一区二区三区| 欧美色道久久88综合亚洲精品| 欧美视频裸体精品| 国产一区二区三区在线免费观看| 久久91精品国产| 国产精品视频男人的天堂| 久久免费视频这里只有精品| 精品久久香蕉国产线看观看亚洲| 欧美国产欧美亚洲国产日韩mv天天看完整| 精品精品国产国产自在线| 自拍亚洲一区欧美另类| 国内自拍欧美激情| 麻豆国产va免费精品高清在线| 国产精品免费福利| 国产日韩欧美中文| 成人女保姆的销魂服务| 亚洲一区制服诱惑| 久久久久五月天| 国产精品观看在线亚洲人成网| 国产精欧美一区二区三区| 中文字幕日韩欧美精品在线观看| 亚洲一级片在线看| 国产精品综合久久久| 欧美视频在线视频| 国产精品自拍网| 热99精品只有里视频精品| 人人做人人澡人人爽欧美| 色樱桃影院亚洲精品影院| 亚洲一区二区免费在线| 久久99青青精品免费观看| 美女视频久久黄| 九九热视频这里只有精品| www.欧美精品一二三区| 欧美日韩午夜激情| 亚洲美女精品成人在线视频| 欧美激情在线一区| 成人久久久久久| 色综合久久精品亚洲国产| 5278欧美一区二区三区| 欧美专区在线播放| 精品久久久久久电影| 亚洲国产精品视频在线观看| 日韩精品欧美国产精品忘忧草| 日韩av不卡在线| 尤物九九久久国产精品的特点| 欧美日韩中文在线观看| 77777少妇光屁股久久一区| 国产成人精品国内自产拍免费看| 欧美午夜电影在线| 91精品久久久久久久久久| 国产精品久久久av| 久久精品国产久精国产思思| 人体精品一二三区| 欧美福利视频在线| 黑人巨大精品欧美一区免费视频| 亚洲男子天堂网| 精品中文字幕在线观看| 亚洲网站在线观看| 一级做a爰片久久毛片美女图片| 日韩精品在线免费观看| 久久99久久99精品中文字幕| 亚洲欧美日韩精品久久奇米色影视| 国内精品一区二区三区| www高清在线视频日韩欧美| 一色桃子一区二区| 亚洲天堂第二页| 国产欧美 在线欧美| 久久av在线看| 黑人巨大精品欧美一区二区| 国产精品夜色7777狼人| 日本久久91av| 亚洲人成网站999久久久综合| 成人欧美一区二区三区黑人孕妇| 久热精品视频在线观看| 久久成年人视频| 亚洲精品不卡在线| 国产女同一区二区| 欧美成人精品激情在线观看| 色午夜这里只有精品| 国产美女直播视频一区| 亚洲国产小视频在线观看| 欧美日韩国产成人| 国产精品久久久久7777婷婷| 亚洲国产成人在线播放| 国产精品流白浆视频| 欧美一级黄色网| 日韩在线观看免费高清| 乱亲女秽乱长久久久| 日韩精品极品在线观看播放免费视频| xvideos国产精品| 久久男人的天堂| 国产精品小说在线| 久久久精品国产一区二区| 97久久超碰福利国产精品…| 国产精品av免费在线观看| 欧美影院在线播放| 欧美大肥婆大肥bbbbb| www.99久久热国产日韩欧美.com| 久久久久久久久久久人体| 成人免费在线视频网站| 欧美大片免费观看在线观看网站推荐| 国产深夜精品福利| 亚洲欧美国产制服动漫| 狠狠躁夜夜躁人人躁婷婷91| 亚洲精品久久久久久久久久久| 日韩电影第一页| 亚洲国产精品成人va在线观看| 久久综合五月天| 亚洲欧美制服丝袜| 88国产精品欧美一区二区三区| 91免费国产网站| 日韩欧美中文在线| 午夜欧美大片免费观看| 国外视频精品毛片| 国产精品99久久久久久久久| 色哟哟网站入口亚洲精品|