go中json常用操作
阿新 • • 發佈:2019-01-09
json介紹
官方介紹:http://golang.org/doc/articles/json_and_go.html
對照關係
go | json |
---|---|
bool | booleans |
float64 | numbers |
string | strings |
[]interface{} | array |
map[string]interface{} | objects |
nil | null |
注意事項
結構體的私有欄位(小寫欄位不會被編解碼)
json tag,struct欄位中的別名
json 物件的 key 必須是字串
- 解碼Unmarshal傳遞的欄位是指標
strust欄位
type Response struct {
Code int json:"code"
//Code進行編碼時在json中會以code進行顯示和解析
Msg string json:"msg"
Data interface{} json:"data"
time string //私有欄位不會被json解析,解析時會隱藏該欄位
}
編解碼 Marshal
func Marshal(v interface{}) ([]byte, error)
func MarshalIndent(v interface{}, prefix, indent string) ([]byte, error)
編碼為json字串,結構體私有欄位名稱不會進行編解碼
type Response struct {
Code int `json:"code"` //欄位標籤json中的tag,可選
Msg string `json:"msg"`
Data interface {} `json:"data"`
time string //私有欄位不會被json解析
}
func main() {
resp := Response{Code: 9999, Msg: "成功", Data: "bings",time:"1996"}
if data, err := json.Marshal(resp); err == nil {
fmt.Printf("%s", data)
}
}
輸出:{"code":9999,"msg":"成功","data":"bings"}
如果輸出內容較長,不容易閱讀,可使用方法2進行輸出格式化
if data, err := json.MarshalIndent(resp,"","\t"); err == nil {
fmt.Printf("%s", data)
}
輸出結果為
{
"code": 9999,
"msg": "成功",
"data": "bings"
}
Unmarshal
func Unmarshal(data []byte, v interface{}) error
解碼為struct 私有欄位不會進行json編解碼
type Response struct {
Code int `json:"code"`
Msg string `json:"msg"`
Data interface{} `json:"data"`
time string //私有欄位不會被json解析
}
func main() {
jsonString := "{\"code\":9999,\"msg\":\"成功\",\"data\":\"bings\",\"time\":\"1997\"}"
var resp Response
err := json.Unmarshal([]byte(jsonString), &resp)
if err == nil {
fmt.Println(resp)
}
}
輸出 {9999 成功 bings }