これもなぜ調べたか忘れてしまったが、 Go の json.Unmarshal で、
- JSON タグで空白を含むキーの書き方
omitempty
はカンマのあとに書くが、ではカンマを含むキーの JSON タグはどう書くのか- JSON タグを指定しない場合、構造体のどのフィールドにマッピングされるのか
などが気になって調べたんだったと思う。あと、 JSON タグを書いてるのにうまくマッピングされずに困って調べたような気もする。
- Goのjson.Marshal/Unmarshalの仕様を整理してみる · I Will Survive
- go - Can't unmarshall JSON with key names having spaces - Stack Overflow
- Go escape comma in JSON - Stack Overflow
結論
- JSON タグはダブルクォート必須
- JSON タグが無い場合、 JSON のキーと完全一致または case-insensitive で一致するフィールドにマッピングされる
- JSON タグには空白を含められるが、空白の位置・数も含めて完全一致が求められる
- JSON タグにはカンマを含めることができない
- なので、カンマを含むキーを持つ JSON を構造体にマッピングすることはできない
- しかし構造体ではなく map に対して Unmarshal することで Go のデータ構造として扱うことができる https://play.golang.org/p/93AJCj4tFP
- 例: https://play.golang.org/p/j2rGS2uQ3cY