このツールの動作
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だけで完結します。データがアップロードされることはないため、機密情報でも安心して利用でき、オフラインでも動作します。