golang json用法講解

2022-05-06 05:00:13 字數 2674 閱讀 1516

下面看看乙個正常的結構體轉json是什麼樣子:

package main

import (

"encoding/json"

"fmt")

// product 商品資訊

type product struct

func main()

p.name = "xiao mi 6"

p.isonsale = true

p.number = 10000

p.price = 2499.00

p.productid = 1

data, _ := json.marshal(p)

fmt.println(string(data))}

//結果

何為tag,tag就是標籤,給結構體的每個欄位打上乙個標籤,標籤冒號前是型別,後面是標籤名

// product _

type product struct

// 序列化過後,可以看見

omitempty,tag裡面加上omitempy,可以在序列化的時候忽略0值或者空值

package main

import (

"encoding/json"

"fmt")

// product _

type product struct

func main()

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))

}// 結果

type,有些時候,我們在序列化或者反序列化的時候,可能結構體型別和需要的型別不一致,這個時候可以指定,支援string,number和boolean

注意:這個地方有個問題,實測go版本 1.14.2  如果字串是 "" 那麼會報錯:

json: invalid number literal, trying to unmarshal "\"\"" into number

package main

import (

"encoding/json"

"fmt")

// product _

type product struct

func main() `

p := &product{}

err := json.unmarshal(byte(data), p)

fmt.println(err)

fmt.println(*p)

}// 結果

json.number 和type差不多 也是實現 string,int 相互轉換的,也是一樣有上面的問題,當在字串 「」 的時候 會json轉換失敗,但是低版本(1.13.0) go是不會報錯的

type test1 struct 

cc := ``

var p1 test1

err := json.unmarshal(byte(cc),&p1)

fmt.println(err)

fmt.println(p1.name)

在很多業務場景下,比如說php返回的json,可能 id有時候是 1 有時候是 "1",你是無法保證的,通過tag和 json.number ,我實測在""空字串下會報錯。所以需要你自己實現乙個型別,然後實現對應的  marshaljson 和unmarshaljson 就可以了,下面看看**:

//轉換成int

func (g *gint) unmarshaljson(data byte) error

data = bytes.trim(data, "\"")

if len(data) == 0

if bytes.equal(data, byte("null"))

in,err := strconv.atoi(string(data))

if err != nil

*g = gint(in)

return nil

}//轉換成json

func (g *gint) marshaljson() (data byte, err error)

func main()

cc := ``

var p1 test1

err := json.unmarshal(byte(cc),&p1)

fmt.println(err)

d := 1

dd := d+ int(p1.name)

fmt.println(p1.name)

fmt.println(dd)

}

上面**,我為 int 型別定義了乙個型別別名 gint,並且實現了 unmarshaljson  和 marshaljson 方法,支援了 「」 「11」 「abc」 "null" 的字串和 1,2,3,-4 常規的int。 unmarshaljson內部遮蔽了報錯,盡量保證json成功轉換而不報錯。

Golang JSON的高階用法例項講解

痛點 json 是當前最常用的資料傳輸格式之一,純文字,容易使用,方便閱讀,在通訊過程中大量被使用。你是否遇到過json中某個字段填入某種型別都適合而陷入兩難境地?例如 定義了乙個port欄位,你wcasu卻不知道是填入 8080 還是 8080 的尷尬局面 你是否遇到過json反解析報錯是因為填入...

Golang json用法詳解

簡介 json格式可以算我們日常最常用的序列化格式之一了,go語言作為乙個由google開發,號稱網際網路的c語言的語言,自然也對json格式支援很好。但是go語言是個強型別語言,對格式要求極其嚴格而json格式雖然也有型別,但是並不穩定,go語言在解析 為非強型別語言時比如php等序列化的json...

Golang json用法詳解(一)

json格式可以算我們日常最常用的序列化格式之一了,go語言作為乙個由google開發,號稱網際網路的c語言的語言,自然也對json格式支援很好。但是go語言是個強型別語言,對格式要求極其嚴格而json格式雖然也有型別,但是並不穩定,go語言在解析 為非強型別語言時比如php等序列化的json時,經...