GO的第七天,JSON

最近比較忙,一直沒有時間。最近的開發過程也遇到一些問題,以後會慢慢記錄下來。團隊開發當中也遇到一些讓人心煩的事,不說廢話了,先開始今天的話題吧。json是一種用於發送和接收結構化信息的標準協議。如今基本上API傳輸格式都是json,並且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

相關文章
相關標籤/搜索