100% ローカル — データがブラウザの外に出ることはありません

JSONをGoに変換|jsonタグ付きの構造体をそのまま貼れる形で

JSONのサンプルを、jsonタグ付きのGo構造体に変換します。列は gofmt が揃えるとおりに整列して出てくるので、貼り付けたあとに整える手間がありません。

高速 プライベート Cookieゼロ

JSON 入力

Go 出力

このツールの動作

JSON の標本が Go の構造体になります。オブジェクト一つにつき一つです。

{ "id": 1, "firstName": "Ada", "address": { "city": "Paris" } }
type Root struct {
	Id        int     `json:"id"`
	FirstName string  `json:"firstName"`
	Address   Address `json:"address"`
}

type Address struct {
	City string `json:"city"`
}

列は gofmt が揃えるとおりに揃えています。名前、型、タグの順です。整形されていない Go を読む人はいません。これをファイルに貼って gofmt をかけても、何も変わらないはずです。

この整列は最近のものです。以前は項目が空白ひとつで区切られて出ていました。小さなことですが、それでも、名乗っている言語らしく見えない出力でした。

名前は公開し、鍵はタグに置く

encoding/json は公開されていない項目を完全に無視します。小文字の項目は何も復号せず、何も符号化せず、何も言いません。だからすべての項目を公開名にします。PascalCase で、鍵が数字で始まるときは前に F を付けます(2fa は F2fa)。タグには元の鍵がそのまま入ります。

同じ Go の名前になる二つの鍵——user-name と userName——は、番号付きの接尾辞で分けます。タグは別々のままなので、どちらの項目も自分の鍵に対応し続けます。

omitempty は思ったより多くを省く

この選択肢は、すべてのタグに ,omitempty を足します。効くのは符号化のときだけで、「無い」と「零」を区別しません。0、""、false、空のスライス、nil のマップは、どれも出力から消えます。

任意の絞り込みにはそれで結構ですが、零でありうる点数には誤りです。その違いが効くところでは、ふつうは指し手——*int——にします。nil なら null を、そうでなければ本物の 0 を書きます。

型と、標本が言えないこと

  • 整数は int になります。 int64 ではありません。64 ビットの環境ではどちらも同じで、それを超える値は黙って切り詰められるのではなく、復号の時点で声を上げて失敗します。
  • null と型の分からない値は any になります。 空の配列は []any、型の混ざった配列も同じです。整数と小数だけが混ざっている場合は []float64 が両方を覆います。
  • 指し手の項目はなく、省略可能な項目もありません。 標本にはそれが示せないからです。ときどき無い鍵は、あなたが *T に直すものです。二つ目の荷と突き合わせるとき、まず確かめる値打ちがあるのもそこです。

プライバシー

すべての処理はブラウザ内のJavaScriptだけで完結します。データがアップロードされることはないため、機密情報でも安心して利用でき、オフラインでも動作します。

よくある質問

なぜ項目名が大文字で始まるのですか。
`encoding/json` が見るのは公開された項目だけだからです。小文字の `id` は両方向で黙って飛ばされます。構造体はコンパイルでき、その項目には何も入らず、そこからは何も出ません。タグが元の鍵を保つので、`Id int `json:"id"`` はあなたの文書にあるとおりを読み書きします。
omitempty は実際には何をしますか。
すべてのタグに `,omitempty` を足します。これは**符号化のとき**に零値を書き出さない指定です。復号には何の影響もなく、鍵が無いことと零であることを区別しません。`0`、`""`、`false`、空のスライスは、どれも出力から消えます。本物の零が意味を持つなら、ふつうは指し手の項目にします。
項目名は `Id` と `ID` のどちらがよいですか。
Go の書き方の指針は `ID` と言い、検査器もそう言います。この道具は鍵から機械的に導いた `Id` を書きます。頭字語を直すには、`ID`、`URL`、`API`、`HTTP` といった一覧を抱え、見たこともない鍵に当てはめることになるからです。タグがあるので改名しても壊れません。ご自身で直して安全な箇所です。

関連ツール