基本的 JSON 解碼

json.Unmarshalencoding/json 解碼 JSON 值到由給定的變數指示的值的包。

引數是要在 []bytes 中解碼的值,以及用作反序列化值的儲存的變數。返回的值是錯誤(失敗時)。

encodedValue := []byte(`{"London":18,"Rome":30}`)

// generic storage for the decoded JSON
var data map[string]interface{}

// decode the value into data
// notice that we must pass the pointer to data using &data
err := json.Unmarshal(encodedValue, &data)

// check if the decoding is successful
if err != nil {
    panic(err)
}

fmt.Println(data)
map[London:18 Rome:30]

操場

請注意,在上面的示例中,我們事先知道了鍵的型別和值。但情況並非總是如此。實際上,在大多數情況下,JSON 包含混合值型別。

encodedValue := []byte(`{"city":"Rome","temperature":30}`)

// generic storage for the decoded JSON
var data map[string]interface{}

// decode the value into data
if err := json.Unmarshal(encodedValue, &data); err != nil {
    panic(err)
}

// if you want to use a specific value type, we need to cast it
temp := data["temperature"].(float64)
fmt.Println(temp) // 30
city := data["city"].(string)
fmt.Println(city) // "Rome"

操場

在上面的最後一個例子中,我們使用通用對映來儲存解碼值。我們必須使用 map[string]interface{},因為我們知道鍵是字串,但我們事先並不知道它們的值的型別。

這是一種非常簡單的方法,但它也非常有限。在現實世界中,你通常會將 JSON 解碼為自定義的 struct 型別