Go基礎 Json在Go中的使用

2021-09-27 10:47:13 字數 2560 閱讀 4442

本文主要根據go語言json包[1]、官方提供的json and go[2]和go-and-json[3]整理的。

marshal提供對資料進行json序列化的功能:

func marshal(v inte***ce{}) (byte, error)

type message struct

m := message

b, err := json.marshal(m)

//result

b == byte(``)

注意事項:

func unmarshal(data byte, v inte***ce{}) error

var m message

err := json.unmarshal(b, &m)

//result:如果b包含符合結構體m的有效json格式,那麼b中儲存的資料就會儲存到m中,比如:

m = message

golang中構建欄位的時候我們可能會在結構體欄位名後增加包含在倒引號(backticks)的tag,如:

type mystruct struct
type mystruct struct 

//在這個例子中,如果some_field為"":

//加上omitempty後,序列化後的json為{}

//如果不加上omitempty,序列化後的json為

id string `json:"id"`

password string `json:"-"`

}golang支援struct的巢狀,如:

id string `json:"id"`

}type org struct

org}

data := byte(`

`)// and/or

如果結構體**現pointer型別,當pointernil時通過dereferenced獲取指標對應的值再進行序列化

要注意檢查marshalunmarshal返回的err引數,序列化時出現的錯誤會比較少見,但當golang不知道如何將你的資料型別序列化為json時就會報錯(比如你嘗試序列化包含nil pointer的資料型別時)。

如果你不想處理marshal出現的錯誤時,你可以將marshal出現的錯誤轉化為panic:

func mustmarshal(data inte***ce{}) byte 

return out

}

如果你不知道你要解析的json資料長啥樣時,你可以將其反序列化為任意資料型別inte***ce{}

//將json資料反序列化為任意型別

var parsed inte***ce{}

err := json.unmarshal(data, &parsed)

//根據parsed資料型別做不同的邏輯處理

switch parsed.(type)

//另一種型別判定邏輯

intval, ok := parsed.(int)

if !ok

一般情況下,你處理的json對應的都是乙個object,你可以將其反序列化為map[string]inte***ce{}

var parsed map[string]inte***ce{}

data := byte(`

`)err := json.unmarshal(data, &parsed)

//直接呼叫

parsed["id"]

//但使用之前仍然需要格式轉換

idstring := parsed["id"].(string)

除了object型別外,如果你清楚需要解析的json格式,可以做如下反序列化:

bool, for json booleans

float64, for json numbers

string, for json strings

inte***ce{}, for json arrays

map[string]inte***ce{}, for json objects

nil for json null

[1]

[2][3]

在Go語言中使用JSON

將乙個物件編碼成json資料,接受乙個inte ce 物件,返回byte和error func marshal v inte ce byte,error marshal函式將會遞迴遍歷整個物件,依次按成員型別對這個物件進行編碼,型別轉換規則如下 bool型別轉換為json的boolean 整數,浮點...

Go基礎 Go中的import

package main import fmt func main import fmt 告訴go編譯器這個程式需要使用fmt包的函式,fmt包實現了格式化io 輸入 輸出 的函式,可以是相對路徑,也可以是絕對路徑,推薦使用絕對路徑 起始於工程根目錄 import fmt 在包前面加上 即可。可以省...

在Go語言中使用JSON的方法

encode 將乙個物件編碼成json資料,接受乙個inte ce 物件,返回byte和error func marshal v inte ce byte,error marshal函式將會遞迴遍歷整個物件,依次按成員型別對這個物件進行編碼,型別轉換規則如下 bool型別 轉換為json的boole...