1. 程式人生 > >go中json常用操作

go中json常用操作

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 }