2017-02-09 104 views
0

我有一個JSON,我需要用一個結構來提取出來的數據:Golang地圖JSON爲結構

我想它映射到以下結構:

type Message struct { 
    Name string `json:"name"` 
    Values []struct { 
     Value int `json:"value,omitempty"` 
     Comments int `json:"comments,omitempty"` 
     Likes int `json:"likes,omitempty"` 
     Shares int `json:"shares,omitempty"` 
    } `json:"values"` 
} 

這是我的JSON:

[{ 
     "name": "organic_impressions_unique", 
     "values": [{ 
      "value": 8288 
     }] 
    }, { 
     "name": "post_story_actions_by_type", 
     "values": [{ 
      "shares": 234, 
      "comments": 838, 
      "likes": 8768 
     }] 
    }] 

我的問題是:

  1. 如何結構我的結構?
  2. 如何讀取名稱,值和註釋?

到目前爲止,我可以使用下面的代碼無法讀取數據:

msg := []Message{} 
getJson("https://json.url", msg) 
println(msg[0]) 

的功能的getJSON:

func getJson(url string, target interface{}) error { 
    r, err := myClient.Get(url) 
    if err != nil { 
     return err 
    } 
    defer r.Body.Close() 

    return json.NewDecoder(r.Body).Decode(target) 
} 
+0

有什麼問題嗎? –

+0

我需要知道如何構造我的結構以及如何讀取名稱,值和註釋等...... –

+0

@JonathonReinhart我想這不是很清楚,我更新了問題 –

回答

2

你的結構是正確的。所有你需要的是愛使用json.Unmarshal功能有一個正確的目標對象,它是Message實例片:[]Message{}

Correct unmarshaling

type Message struct { 
    Name string `json:"name"` 
    Values []struct { 
     Value int `json:"value,omitempty"` 
     Comments int `json:"comments,omitempty"` 
     Likes int `json:"likes,omitempty"` 
     Shares int `json:"shares,omitempty"` 
    } `json:"values"` 
} 

func main() { 
    input := []byte(` 
[{ 
    "name": "organic_impressions_unique", 
    "values": [{ 
     "value": 8288 
    }] 
    }, { 
     "name": "post_story_actions_by_type", 
     "values": [{ 
      "shares": 234, 
      "comments": 838, 
      "likes": 8768 
     }] 
    }] 
`) 

    messages := []Message{} // Slice of Message instances 
    json.Unmarshal(input, &messages) 
    fmt.Println(messages) 
} 
3

你的JSON似乎是一個數組。只是解開它。例如:

var messages []Message 
err := json.Unmarshal(json, &messages) 

應該工作。

+0

'json'裏面unmarshal代表什麼?網址? –

+0

在我的問題plz中檢查getJson函數,現在我添加了它 –

+0

json在unmarshal中代表json blob在你的問題中, – Uvelichitel

0

我不知道這將是任何幫助,現在,但我最近寫的實用程序,用於從JSON輸入產生精確的走類型:https://github.com/m-zajac/json2go

對於從第一篇文章JSON它生成此結構:

type Object struct { 
    Name string `json:"name"` 
    Values []struct { 
     Comments *int `json:"comments,omitempty"` 
     Likes  *int `json:"likes,omitempty"` 
     Shares  *int `json:"shares,omitempty"` 
     Value  *int `json:"value,omitempty"` 
    } `json:"values"` 
} 

可以解碼數據,這個結構是這樣的:

var docs []Object 
if err := json.Unmarshal(input, &docs); err != nil { 
    // handle error 
}