詳解go的json對應結構體里的Tag

資料來源:https://www.bookstack.cn/read/gobook/go_lang_base-09.1.3.md, https://www.cnblogs.com/lurenq/p/11533219.html

  1. golang的json對應結構體里的Tag是json的key的名字
u := &User{UserId: 1, UserName: "tony"}
j, _ := json.Marshal(u)
fmt.Println(string(j))
// 輸出內(nèi)容:
// {"user_id":1,"user_name":"tony"}
// 如果在屬性中不增加標簽說明,則輸出:
// {"UserId":1,"UserName":"tony"}
// 可以看到直接用struct的屬性名做鍵值痛悯。
// ==其中還有一個bson的聲明崎坊,這個是用在將數(shù)據(jù)存儲到mongodb使用的==

  1. tag里面加上omitempy肩榕,可以在序列化的時候忽略0值或者空值
package main

import (
    "encoding/json"
    "fmt"
)

// Product _
type Product struct {
    Name      string  `json:"name"`
    ProductID int64   `json:"product_id,omitempty"`
    Number    int     `json:"number"`
    Price     float64 `json:"price"`
    IsOnSale  bool    `json:"is_on_sale,omitempty"`
    Amount     int     `json:"amount"`
}

func main() {
    p := &Product{}
    p.Name = "Xiao mi 6"
    p.IsOnSale = false
    p.Number = 10000
    p.Price = 2499.00
    p.ProductID = 0
    data, _ := json.Marshal(p)
    fmt.Println(string(data))
}


結果:


{"name":"Xiao mi 6","number":10000,"price":2499,"amount":0}

// 值為false,0或者空字符串的ProductID和IsOnSalebool都沒有出現(xiàn)在最后的json串里。

  1. 有些時候器瘪,我們在序列化或者反序列化的時候,可能結構體類型和需要的類型不一致绘雁,這個時候可以指定tag的type支持
package main

import (
    "encoding/json"
    "fmt"
)

// Product _
type Product struct {
    Name      string  `json:"name"`
    ProductID int64   `json:"product_id,string"`
    Number    int     `json:"number,string"`
    Price     float64 `json:"price,string"`
    IsOnSale  bool    `json:"is_on_sale,string"`
}

type ProductV2 struct {
    Name      string  `json:"name"`
    ProductID int64   `json:"product_id"`
    Number    int     `json:"number"`
    Price     float64 `json:"price"`
    IsOnSale  bool    `json:"is_on_sale"`
}

func main() {
    var data = `{"name":"Xiao mi 6","product_id":"10","number":"10000","price":"2499","is_on_sale":"true"}`
    p := &Product{}
    err := json.Unmarshal([]byte(data), p)
    fmt.Printf("[have type] err:%v,p:%+v\n", err, p)

    p2 := &ProductV2{}
    err = json.Unmarshal([]byte(data), p2)
    fmt.Printf("[no type] err:%v,p:%+v\n", err, p2)
}



輸出:

[have type] err:<nil>,p:&{Name:Xiao mi 6 ProductID:10 Number:10000 Price:2499 IsOnSale:true}
[no type] err:json: cannot unmarshal string into Go struct field ProductV2.product_id of type int64,p:&{Name:Xiao mi 6 ProductID:0 Number:0 Price:0 IsOnSale:false}

其中json的type如下:

bool, for JSON booleans
float64, for JSON numbers
string, for JSON strings
[]interface{}, for JSON arrays
map[string]interface{}, for JSON objects
nil for JSON null

如果有不對的橡疼,希望各位大佬批評指正。感激不盡庐舟。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末欣除,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子挪略,更是在濱河造成了極大的恐慌历帚,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件杠娱,死亡現(xiàn)場離奇詭異挽牢,居然都是意外死亡,警方通過查閱死者的電腦和手機墨辛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門卓研,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人睹簇,你說我怎么就攤上這事奏赘。” “怎么了太惠?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵磨淌,是天一觀的道長。 經(jīng)常有香客問我凿渊,道長梁只,這世上最難降的妖魔是什么缚柳? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮搪锣,結果婚禮上秋忙,老公的妹妹穿的比我還像新娘。我一直安慰自己构舟,他們只是感情好灰追,可當我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著狗超,像睡著了一般弹澎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上努咐,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天苦蒿,我揣著相機與錄音,去河邊找鬼渗稍。 笑死佩迟,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的免胃。 我是一名探鬼主播音五,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼羔沙!你這毒婦竟也來了躺涝?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤扼雏,失蹤者是張志新(化名)和其女友劉穎坚嗜,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诗充,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡苍蔬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蝴蜓。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碟绑。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖茎匠,靈堂內(nèi)的尸體忽然破棺而出格仲,到底是詐尸還是另有隱情,我是刑警寧澤诵冒,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布凯肋,位于F島的核電站,受9級特大地震影響汽馋,放射性物質(zhì)發(fā)生泄漏侮东。R本人自食惡果不足惜圈盔,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一匪蝙、第九天 我趴在偏房一處隱蔽的房頂上張望歧胁。 院中可真熱鬧啊片,春花似錦粥诫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至便锨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間我碟,已是汗流浹背放案。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留矫俺,地道東北人吱殉。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像厘托,于是被迫代替她去往敵國和親友雳。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內(nèi)容