質問をすることでしか得られない、回答やアドバイスがある。

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

ただいまの
回答率

90.85%

  • JSON

    966questions

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

  • Google API

    439questions

    Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

  • Go

    430questions

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

golangでAPIからJSONの構造体の値があるときとないときの場合のエラー処理

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 614

seven77

score 4

Google Book APIから以下のようにレスポンス(①)が来るので以下のように構造体(②)を作りました。

{
 "kind": "books#volumes",
 "totalItems": 1,
 "items": [
  {
   "kind": "books#volume",
   "id": "xMMeNwAACAAJ",
   "etag": "M8bNz6/uLH4",
   "selfLink": "https://www.googleapis.com/books/v1/volumes/xMMeNwAACAAJ",
   "volumeInfo": {
    "title": "カラフル",
    "authors": [
     "森絵都"
    ],
    "publishedDate": "2007-09",
    "description": "生前の罪により、輪廻のサイクルから外されたぼくの魂。だが天使業界の抽選にあたり、再挑戦のチャンスを得た。自殺を図った少年、真の体にホームステイし、自分の罪を思い出さなければならないのだ。真として過ごすうち、ぼくは人の欠点や美点が見えてくるようになるのだが...。不朽の名作ついに登場。",
    "industryIdentifiers": [
     {
      "type": "ISBN_10",
      "identifier": "4167741016"
     },
     {
      "type": "ISBN_13",
      "identifier": "9784167741013"
     }
    ],
    "readingModes": {
     "text": false,
     "image": false
    },
    "pageCount": 259,
    "printType": "BOOK",
    "categories": [
     "Fantasy fiction"
    ],
    "averageRating": 3.5,
    "ratingsCount": 27,
    "maturityRating": "NOT_MATURE",
    "allowAnonLogging": false,
    "contentVersion": "preview-1.0.0",
    "imageLinks": {
     "smallThumbnail": "http://books.google.com/books/content?id=xMMeNwAACAAJ&printsec=frontcover&img=1&zoom=5&source=gbs_api",
     "thumbnail": "http://books.google.com/books/content?id=xMMeNwAACAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api"
    },
    "language": "ja",
    "previewLink": "http://books.google.co.jp/books?id=xMMeNwAACAAJ&dq=isbn:9784167741013&hl=&cd=1&source=gbs_api",
    "infoLink": "http://books.google.co.jp/books?id=xMMeNwAACAAJ&dq=isbn:9784167741013&hl=&source=gbs_api",
    "canonicalVolumeLink": "https://books.google.com/books/about/%E3%82%AB%E3%83%A9%E3%83%95%E3%83%AB.html?hl=&id=xMMeNwAACAAJ"
   },
   "saleInfo": {
    "country": "JP",
    "saleability": "NOT_FOR_SALE",
    "isEbook": false
   },
   "accessInfo": {
    "country": "JP",
    "viewability": "NO_PAGES",
    "embeddable": false,
    "publicDomain": false,
    "textToSpeechPermission": "ALLOWED",
    "epub": {
     "isAvailable": false
    },
    "pdf": {
     "isAvailable": false
    },
    "webReaderLink": "http://play.google.com/books/reader?id=xMMeNwAACAAJ&hl=&printsec=frontcover&source=gbs_api",
    "accessViewStatus": "NONE",
    "quoteSharingAllowed": false
   },
   "searchInfo": {
    "textSnippet": "生前の罪により、輪廻のサイクルから外されたぼくの魂。だが天使業界の抽選にあたり、再挑戦のチャンスを得た。自殺を図った少年、真の体にホームステイし、自分の罪を思い ..."
   }
  }
 ]
}

type GoogleBook struct {
    Kind       string `json:"kind"`
    TotalItems int    `json:"totalItems"`
    Items      []struct {
        Kind       string `json:"kind"`
        ID         string `json:"id"`
        Etag       string `json:"etag"`
        SelfLink   string `json:"selfLink"`
        VolumeInfo struct {
            Title               string   `json:"title"`
            Authors             []string `json:"authors"`
            PublishedDate       string   `json:"publishedDate"`
            Description         string   `json:"description"`
            IndustryIdentifiers []struct {
                Type       string `json:"type"`
                Identifier string `json:"identifier"`
            } `json:"industryIdentifiers"`
            ReadingModes struct {
                Text  bool `json:"text"`
                Image bool `json:"image"`
            } `json:"readingModes"`
            PageCount        int      `json:"pageCount"`
            PrintType        string   `json:"printType"`
            Categories       []string `json:"categories"`
            AverageRating    float64  `json:"averageRating"`
            RatingsCount     int      `json:"ratingsCount"`
            MaturityRating   string   `json:"maturityRating"`
            AllowAnonLogging bool     `json:"allowAnonLogging"`
            ContentVersion   string   `json:"contentVersion"`
            ImageLinks       struct {
                SmallThumbnail string `json:"smallThumbnail"`
                Thumbnail      string `json:"thumbnail"`
            } `json:"imageLinks"`
            Language            string `json:"language"`
            PreviewLink         string `json:"previewLink"`
            InfoLink            string `json:"infoLink"`
            CanonicalVolumeLink string `json:"canonicalVolumeLink"`
        } `json:"volumeInfo"`
        SaleInfo struct {
            Country     string `json:"country"`
            Saleability string `json:"saleability"`
            IsEbook     bool   `json:"isEbook"`
        } `json:"saleInfo"`
        AccessInfo struct {
            Country                string `json:"country"`
            Viewability            string `json:"viewability"`
            Embeddable             bool   `json:"embeddable"`
            PublicDomain           bool   `json:"publicDomain"`
            TextToSpeechPermission string `json:"textToSpeechPermission"`
            Epub                   struct {
                IsAvailable bool `json:"isAvailable"`
            } `json:"epub"`
            Pdf struct {
                IsAvailable bool `json:"isAvailable"`
            } `json:"pdf"`
            WebReaderLink       string `json:"webReaderLink"`
            AccessViewStatus    string `json:"accessViewStatus"`
            QuoteSharingAllowed bool   `json:"quoteSharingAllowed"`
        } `json:"accessInfo"`
        SearchInfo struct {
            TextSnippet string `json:"textSnippet"`
        } `json:"searchInfo"`
    } `json:"items"`
}

ISBNがはいっている③がある時と無い時があり、それのエラー処理の仕方がわかりません。

IndustryIdentifiers []struct {
                Type       string `json:"type"`
                Identifier string `json:"identifier"`
            } `json:"industryIdentifiers"`

⬇

"industryIdentifiers": [
     {
      "type": "ISBN_10",
      "identifier": "4167741016"
     },
     {
      "type": "ISBN_13",
      "identifier": "9784167741013"
     }
    ],

③がない場合は、ISBN_10, ISBN_13は空であるようにしたいです。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

こういったAPI応答の解釈は2段階あって、

  • JSONとしての解釈
  • アプリケーションとしての解釈

③があるかないかにかかわらずJSONとしての解釈は可能なはずです。
あらためてIndustryIdentifiersの長さをチェックしてください。
それをエラーとするかどうかはアプリの要件次第です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.85%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • JSON

    966questions

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

  • Google API

    439questions

    Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

  • Go

    430questions

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