2017-02-09 6 views
0

構造体へ私のJSON:GolangマップJSONは私が構造体を使用して、それからデータを抽出するために必要な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

構造が正しいです。 []Message{}

Correct unmarshaling::必要なのは、Messageインスタンスのスライスで正確なターゲットオブジェクトにjson.Unmarshal機能を使用するためにある

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'は何の略ですか? URL? –

+0

私の質問でgetJson関数をチェックする、今すぐ追加しました –

+0

jsonのアンマーシャルの中のjsonは、 – Uvelichitel

0

これは今任意の助けになるならば、私は知りません、 https://github.com/m-zajac/json2go

JSONについての最初の記事から、それはこの構造体を生成します:

しかし、私は最近、正確な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 
} 
関連する問題