LoginSignup
2
6

More than 5 years have passed since last update.

Go の json は tag を間違えるとハマる

Last updated at Posted at 2017-03-20

Go をちびちびと勉強中にハマったので備忘録

Go は json タグの ダブルクォート " が超重要

ダブルクォートが抜けていると何故か文字列のパースはできてるのに数値が全部 0 リセットされた状態になる。
もうちょい条件がある気もするけど一旦は割愛

なぜ文字列はパースできているのかが最も謎。

json tag のドキュメントはここ

package main
import (
    "bytes"
    "log"
    "json"
)
/**
 * この json tag のダブルクォート、超重要
 */
type User struct {
    Id        int    `json:"id"`
    Name      string `json:"name"`
    Following int    `json:"following"`
    Followers int    `json:"followers"`
    Unreads   int    `json:"unreads"`
    CreatedAt int    `json:"created_at"`
}
func main() {
    var buf *bytes.Buffer //ここに json データが入るとしよう
    /**
     * 簡単のため、色々と省略
     */
    var user User
    err := json.Unmarshal(buf, &user)
    if err != nil {
        log.Fatal(err)
    }
    println(user)
}

ここをダブルクォート " 抜きで書いちゃうと

type User struct {
    Id        int    `json:id`
    Name      string `json:name`
    Following int    `json:following`
    Followers int    `json:followers`
    Unreads   int    `json:unreads`
    CreatedAt int    `json:created_at`
}

こんな事になる

# With double quote
$ go run main.go
{ 1234 username 23 17 0 1490027932013 }

# Without double quote
$ go run main.go
{ 0 username 0 0 0 0 }
2
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
6