2015-04-29 47 views
0

我無法弄清楚在我的代碼中解碼這個json有什麼問題。它返回一個空的結構。這裏去遊樂場:http://play.golang.org/p/K8WznLT5M0在Golang中解碼json

package main 

import (
    "encoding/json" 
    "fmt" 
) 

type ApiParams struct { 
    AccessToken string `json:access_token` 
    TokenType string `json:token_type` 
    ExpiresIn int64 `json:expires_in` 
} 

func main() { 
    data := `{ 
      "access_token": "asdfasdf", 
      "token_type": "bearer", 
      "expires_in": 5173885 
    }` 

    var apiParams ApiParams 
    err := json.Unmarshal([]byte(data), &apiParams) 
    if err != nil { 
     fmt.Println(err) 
    } 
    fmt.Println(apiParams) 
} 
+0

我不能或者直到你告訴我你期望的輸出。 – rightfold

+0

我得到的是'{0}',我期望的是在變量'data'中用json填充的結構ApiParams的一個實例。 –

回答

2

添加雙引號標記:

type ApiParams struct { 
    AccessToken string `json:"access_token"` 
    TokenType string `json:"token_type"` 
    ExpiresIn int64 `json:"expires_in"` 
} 
+0

謝謝,它的工作原理。但爲什麼?我有另一頭駱駝,而不是這個強調的駱駝。那個沒有雙引號的作品。 –

+3

@ElgsQianChen:它需要引號,因爲這是定義的語法。 CamelCase示例有效,因爲如果沒有定義標籤,Go將在解碼時將名稱映射爲小寫。 – JimB

+0

感謝@rightfold,當我談論駱駝案例時,我需要澄清一下,我的意思是駱駝標籤。 –

2

你的註釋是錯誤的。你需要周圍的JSON屬性的名稱,如報價;

type ApiParams struct { 
    AccessToken string `json:"access_token"` 
    TokenType string `json:"token_type"` 
    ExpiresIn int64 `json:"expires_in"` 
}