2015-08-13 154 views
-1

這是我第一次嘗試Go,我覺得我錯過了重要的東西。試圖從一個web服務,但我得到的輸出解碼JSON消息是:無法解碼JSON響應

{響應:{請求:[]}}

所有我真正感興趣的是請求節點內的數據。我的for循環顯然沒有被調用,因爲數組是空的。我覺得我的結構需要完全按照他們在web服務中的表示來聲明?

樣品JSON:

{ 
"response": { 
"requests": [ 
{ 
"request": {} 
}, 
{ 
"request": { 
    "id": 589748, 
    "image_thumbnail": "", 
    "description": "Blah blah", 
    "status": "received", 
    "user": "test" 
} 
} 
], 
"count": "50", 
"benchmark": 0.95516896247864, 
"status": {}, 
"debug": {} 
} 
} 


type Request struct { 
    id   int   `json:"id"` 
    description string  `json:"description"` 
    user   string  `json:"user"` 
} 

type Requests struct { 
    request  Request  `json:"request"` 
} 

type Response struct { 
    requests  []Requests `json:"requests"` 
} 

type RootObject struct { 
    response  Response `json:"response"` 
} 

url := "<webservice>" 

req, err := http.NewRequest("GET", url, nil) 
req.Header.Set("Content-Type", "application/json") 

client := &http.Client{} 
resp, err := client.Do(req) 
if err != nil { 
    panic(err) 
} 

defer resp.Body.Close() 

var r RootObject 

decoder := json.NewDecoder(resp.Body) 
decoder.Decode(&r) 


fmt.Printf("%+v", r) 

for _, req := range r.response.requests { 
    fmt.Printf("%d = %s\n", req.request.id, req.request.user) 

} 

回答

2

字段名稱需要使用大寫字母開始,以出口標識符。