最近比較忙,一直沒有時間。最近的開發過程也遇到一些問題,以後會慢慢記錄下來。團隊開發當中也遇到一些讓人心煩的事,不說廢話了,先開始今天的話題吧。json是一種用於發送和接收結構化信息的標準協議。如今基本上API傳輸格式都是json,並且json數據格式相對好處理。json
go語言中將 結構體
轉爲 json
的過程叫編組(marshaling)。編組經過調用 json.Marshal
函數完成。數據結構
type Movie struct { Title string Year int `json:"released"` Color bool `json:"color,omitempty"` Actors []string } var movies = []Movie{ {Title: "Casablanca", Year: 1942, Color: false, Actors: []string{"Humphrey Bogart", "Ingrid Bergman"}}, {Title: "Cool Hand Luke", Year: 1967, Color: true, Actors: []string{"Paul Newman"}}, {Title: "Bullitt", Year: 1968, Color: true, Actors: []string{"Steve McQueen", "Jacqueline Bisset"}}, // ... } data, err := json.Marshal(movies, "", " ") if err != nil { log.Fatalf("JSON marshaling failed: %s", err) } fmt.Printf("%s\n", data)
上面的代碼輸出函數
[ { "Title": "Casablanca", "released": 1942, "Actors": [ "Humphrey Bogart", "Ingrid Bergman" ] }, { "Title": "Cool Hand Luke", "released": 1967, "color": true, "Actors": [ "Paul Newman" ] }, { "Title": "Bullitt", "released": 1968, "color": true, "Actors": [ "Steve McQueen", "Jacqueline Bisset" ] } ]
這裏咱們能夠看出,結構體中的Year成員對應json結構中的released,Color對應color。omitempty
,表示當Go語言結構體成員爲空或零值時不生成JSON對象(這裏false爲零值)。編碼
經過示例,咱們知道了怎麼去構造json結構的數據了。那麼,json結構的數據,咱們怎麼解析呢。code
var titles []struct{ Title string } if err := json.Unmarshal(data, &titles); err != nil { log.Fatalf("JSON unmarshaling failed: %s", err) } fmt.Println(titles) // "[{Casablanca} {Cool Hand Luke} {Bullitt}]"
將JSON數據解碼爲Go語言的數據結構,Go語言中通常叫解碼(unmarshaling),經過 json.Unmarshal
函數完成。
上面的代碼將JSON格式的電影數據解碼爲一個結構體slice,結構體中只有Title成員。對象
經過上面兩個編碼個解碼的示例,咱們對go語言中json的基本使用已經有個大概的瞭解了。開發
《GO語言聖經》string