Go 當中 JSON 常用技巧

2021-10-12 03:17:09 字數 3306 閱讀 1439

忽略 struct 空欄位, 使用omitempty

type user struct

type blogpost struct

type analytics struct

json.

marshal

(struct

)

json.

unmarshal([

]byte(``

),struct

)

type cache struct

json.

marshal

(struct

)

type object struct

這個對應的json是

, 如果json是 則會報錯

go 缺省會把time.time用字串方式序列化. 如果想用其他方式表示time.time, 需要自定義型別並

定義marshaljson

type timeimplmarshaler time.time

func

(o timeimplmarshaler)

marshaljson()

([]byte

, err)

jsoniter 能夠對不是自定義的 type 定義 json 編譯碼方式. 比如對於time.time可以使用 epoch int64

序列化.

)雖然 json 標準裡只支援string作為keymap. 但是 go 通過marshaltext()介面, 使得

其他型別也可以作為mapkey.

type key struct

// 必須是傳值呼叫(編碼)

// 函式當中不能呼叫 json.marshal() 函式

func

(k key)

marshaltext()

([]byte

,error

)// 必須是傳指標呼叫(解碼), 否則解析的值是空.

// 函式當中不能呼叫 json.unmarshal() 函式

func

(k *key)

unmarshaltext

(text [

]byte)(

error

)return errors.

new(

"invalid text")}

func

main()

:"2"

} data, err := json.

marshal

(val)

fmt.

println

(string

(data)

, err)

var vv map

[key]

string

json.

unmarshal

(data,

&vv)

fmt.

println

(vv)

}

如果部分 json 文件沒有標準格式, 可以把原始的資訊使用byte儲存下來.

type rawobject struct

func

main()

`),&data)

fmt.

println

(string

(data.raw)

)// [1,2,3]

}

預設情況下, 如果是inte***ce對應數字的情況會是float64型別的. 如果輸入的數字比較大, 這個會有損精度. 可以使用usenumber()啟用json.number來用字串表示數字.

① 經常 json 裡的欄位名和 go 裡的欄位名是不一樣的. 可以使用field tag來修改.

② 但是乙個個欄位來設定, 太過於麻煩, 如果使用 jsoniter 可以統一設定命名風格.

按照 ①, ② 的方式去選擇 json 的欄位名. 如果方式 ① 的欄位名存在, 則使用方式 ①, 否則再使用方式 ②

type t struct

extra.

setnamingstrategy

(func

(s string

)string)d,

_:= jsoniter.

marshal(t)

fmt.

println

(string

(d))

//

go 標準庫只支援 public 的 field. jsoniter 額外支援了 private 的 field. 需要使用supportprivatefields()

來開啟.

type t struct

extra.

setnamingstrategy

(func

(s string

)string

)extra.

supportprivatefields()

var val t

jsoniter.

unmarshal([

]byte(``

),&val)

json使用技巧

json使用技巧 1.健壯性考慮,判斷是否具有某個屬性,json.isnull 2.讓外界看不到某個屬性 private transient string ignore 當物件被序列化時 寫入位元組序列到目標檔案 時,transient阻止例項中那些用此關鍵字宣告的變數持久化 當物件被反序列化時 從...

Go語言裡的Json

json是一種輕量級資料交換格式,具有靈活 易於閱讀的特點,在網際網路行業有廣泛的應用。go語言執行時裡自帶了encoding json包,提供了marshal 和unmarshal 兩個函式進行編碼和解碼,兩個函式原型如下 func marshal v inte ce byte,error fun...

Go語言裡的Json

json是一種輕量級資料交換格式,具有靈活 易於閱讀的特點,在網際網路行業有廣泛的應用。go語言執行時裡自帶了encoding json包,提供了marshal 和unmarshal 兩個函式進行編碼和解碼,兩個函式原型如下 func marshal v inte ce byte,error fun...