🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Echo(フレームワーク)

Echoは、Go言語で作られたフレームワーク。非常に軽量で、小~中規模のアプリ構成を想定した仕様になっています。公式ドキュメントが用意されており、初心者でも始めやすい点が特徴です。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

921閲覧

Go言語でmapsのデータをstructに格納する方法を教えていただきたいです.

s.kozy

総合スコア16

Echo(フレームワーク)

Echoは、Go言語で作られたフレームワーク。非常に軽量で、小~中規模のアプリ構成を想定した仕様になっています。公式ドキュメントが用意されており、初心者でも始めやすい点が特徴です。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2019/11/07 13:48

Goの勉強を初めて2週間程がたちWebアプリを作成していますが,下記のエラーを解決できないためどなたか教えていただきたいです.

実現したいことは,APIを叩いて取得したデータをSakesというstructにMarshalして,そのデータを返したいです.

現状の問題は,sakesのデータだけを取り出してSakesのstructにMarshalしたいのですが,json: cannot unmarshal object into Go value of type sakenote.Sakesというエラーが返ってきます.
このエラーの原因は理解しているのですが,どのようにsakesのデータをSakesのstructに格納すれば良いのかがわからないので教えていただきたいです.

もし参考になるサイトがあればそちらのURLを共有していただけると助かります.
お手数おかけいたしますがよろしくお願いいたします.

https://www.sakenote.com/api/v1/sakesを叩くと下記のようなJSONが返ってきます.

json

1{ 2 sakes: [ 3 { 4 sake_identify_code: "P002604", 5 sake_name: "〆", 6 sake_furigana: "けじめ", 7 sake_alphabet: "kejime", 8 maker_id: 5030, 9 maker_name: "伊東酒造", 10 maker_postcode: "392-0004", 11 maker_address: "長野県諏訪市諏訪2-3-6", 12 maker_url: "http://www.yokobue.co.jp/", 13 url: "https://www.sakenote.com/d/%E9%95%B7%E9%87%8E%E7%9C%8C/%E4%BC%8A%E6%9D%B1%E9%85%92%E9%80%A0/%E3%80%86", 14 discontinued: false 15 }, 16 { 17 ... 18 }, 19 ], 20 num_pages: 1

server

1const ( 2 ENDPOINT = "https://www.sakenote.com/api/v1/sakes" 3 APIKEY = "***" 4) 5 6type Sake struct { 7 SakeIdentifyCode string `json:"sake_identify_code"` 8 SakeName string `json:"sake_name"` 9 SakeFurigana string `json:"sake_furigana"` 10 SakeAlphabet string `json:"sake_alphabet"` 11 MakerID int `json:"maker_id"` 12 MakerName string `json:"maker_name"` 13 MakerPostcode string `json:"maker_postcode"` 14 MakerAddress string `json:"maker_address"` 15 MakerURL string `json:"maker_url"` 16 URL string `json:"url"` 17 Discontinued bool `json:"discontinued"` 18} 19 20type Sakes []Sake 21 22func GetSakes() ([]Sakes, error) { 23 baseURL := fmt.Sprintf("%s?token=%s", ENDPOINT, APIKEY) 24 req, err := http.NewRequest("GET", baseURL, nil) 25 if err != nil { 26 return nil, err 27 } 28 client := new(http.Client) 29 30 resp, err := client.Do(req) 31 if err != nil { 32 return nil, err 33 } 34 defer resp.Body.Close() 35 36 body, err := ioutil.ReadAll(resp.Body) 37 if err != nil { 38 return nil, err 39 } 40 41 var sakes Sakes 42 err = json.Unmarshal(body, &sakes) 43 44 return nil, nil 45}

参考にしたサイト
Qiita記事①
Qiita記事②

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

サンプルにあったJSONをみるとこのような感じになると思います。
sakesの中の部分は問題なさそうです。

go

1type Hoge struct { 2 Sakes Sakes `json:"sakes"` 3 NumPages int `json:"num_pages"` 4} 5 6// ... 7 var hoge Hoge 8 err := json.Unmarshal(body, &hoge) 9// ...

投稿2019/11/07 14:15

aaharu

総合スコア441

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s.kozy

2019/11/07 15:28

解決しました! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問