GO

【Go】JSONのパースが失敗する原因

投稿日:2018年2月23日 更新日:

Go言語で、JSONをパースする際に躓きましたので原因をまとめておきます。

json.UnmarshalでJSONパースする際のハマったポイントです。

スポンサーリンク

マッピングのミス

単純なミスなのですが、変数の後ろのタグの記述にミスがあると、変数に値が代入されません。

僕は下記のようなミスをしました。

タグのKEY名をダブルクォーテーションで囲っていません。
これだと正しくマッピングされないので、空で返ってきてしまいます。

正しくはこうなります。

混乱したのが、タグに指定した値が上記ように不正だと変数名でマッピングされるんです。

なので、タグが間違っているのにマッピングが成功しているように見えたりして余計に混乱してしまいました。

型の不一致

JSONのNumbers型をstringで受けてしまうと、正しくパースされません。
JSONのNumbers型String型は下記のような違いです。

Numbers型のJSON

String型のJSON

Numbers型は、値がダブルクォーテーションで囲われていない数値のものです。

Numbers型は、Go側ではstring型ではなく、json.Number型で受け取ると正しく動きます。

Goの構造体

これでOKです!

僕は、上記の2点の修正で無事にJSONをパースできました!

まとめ

json.UnmarshalでJSONをパースが失敗した時は下記を確認してみましょう!

  • KEY名をダブルクォーテーションで囲っているか?
  • 受け取るデータの型は合っているか?

Go言語ってけっこう異色ですね。

PHP、Java、C++などの言語を扱って来ましたがGoはかなり躓きます。

まあ、だからこそGoを使えるようになったらプログラマーとしてステップアップ出来るかな?なんて思っています。

最後までお読み頂きありがとうございました!

スポンサーリンク


-GO

執筆者:

関連記事

【GAE/GO】Echo V3はGAE未対応?V2なら動く!

※2018/3/20時点で最新のEchoのバージョンV3で動かせなかった事象です。 その後、V4がリリースされているので最新版のEchoでは本記事の問題は解決しているかもしれません。(未確認) GAE …

GAE/GOの開発環境セットアップ方法

Go言語でGAEを開発する環境のセットアップ手順についてのメモです。 GoのインストールからGAEへのデプロイまで一通り実施します! 基本的には、公式のチュートリアル通りにやっていけばOKなんですけど …

フォスターフリーランス
プロフィール

このサイトを運営しているこへいんです。
アングラーのフリープログラマー。 主にプログラミングと釣の話を発信しています。
プログラミングで自由になり思う存分に釣りをしまくる生活実践中。
詳しいプロフィールはこちら