本文主要根據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
型別,當pointer
非nil
時通過dereferenced
獲取指標對應的值再進行序列化
要注意檢查marshal
和unmarshal
返回的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...