JSONタグ
マーシャリングを制御します
「JSONタグ」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。
JSONタグによるマーシャリングの制御
encoding/jsonパッケージはjsonタグを使って、構造体をJSONに変換するとき、またはJSONから変換するときのキー名やルールを決定します。
デフォルトのフィールド名
タグがない場合、JSONのキーは大文字・小文字を含め、公開フィールド名と完全に一致します。
package main
import (
"encoding/json"
"fmt"
)
type User struct {
Name string
Age int
}
func main() {
b, _ := json.Marshal(User{"Ann", 30})
fmt.Println(string(b))
}キー名の変更
jsonタグによって、出力で使われるキー名を変更できます。ここではNameが小文字のnameになります。
package main
import (
"encoding/json"
"fmt"
)
type User struct {
Name string "json:\"name\""
Age int "json:\"age\""
}
func main() {
b, _ := json.Marshal(User{"Ann", 30})
fmt.Println(string(b))
}omitemptyオプション
,omitemptyを追加すると、フィールドがゼロ値(空文字列、0、nilなど)の場合、そのフィールドを出力から省略できます。
package main
import (
"encoding/json"
"fmt"
)
type User struct {
Name string "json:\"name\""
Email string "json:\"email,omitempty\""
}
func main() {
b, _ := json.Marshal(User{Name: "Ann"})
fmt.Println(string(b))
}フィールドの無視
-というタグを指定すると、エンコーダーはそのフィールドを完全にスキップします。パスワードなどの秘密情報に便利です。
package main
import (
"encoding/json"
"fmt"
)
type User struct {
Name string "json:\"name\""
Password string "json:\"-\""
}
func main() {
b, _ := json.Marshal(User{"Ann", "secret"})
fmt.Println(string(b))
}タグを使ったアンマーシャリング
タグは両方向で機能します。JSONをデコードするとき、タグによってどのJSONキーの値をどのフィールドに入れるかが指定されます。
package main
import (
"encoding/json"
"fmt"
)
type User struct {
Name string "json:\"name\""
}
func main() {
var u User
json.Unmarshal([]byte("{\"name\":\"Bob\"}"), &u)
fmt.Println(u.Name)
}大文字・小文字を区別しない一致
アンマーシャリング時、GoはフォールバックとしてJSONキーとタグを大文字・小文字を区別せずに照合します。それでも、タグを明示的に定義するのが安全で明確な方法です。
stringオプション
,stringオプションを使うと、数値またはboolのフィールドをJSON文字列としてエンコードできます。数値を引用符で囲むことを期待するシステムに便利です。
package main
import (
"encoding/json"
"fmt"
)
type Item struct {
ID int "json:\"id,string\""
}
func main() {
b, _ := json.Marshal(Item{ID: 42})
fmt.Println(string(b))
}オプションの組み合わせ
名前とオプションを組み合わせることができます。json:"email,omitempty"のように、最初に名前を記述し、その後にオプションをカンマで区切って指定します。
非公開フィールドはスキップされる
マーシャリングされるのは、公開(大文字)のフィールドだけです。小文字のフィールドは、どのようなタグが付いていてもencoding/jsonから見えません。
package main
import (
"encoding/json"
"fmt"
)
type User struct {
Name string "json:\"name\""
age int
}
func main() {
b, _ := json.Marshal(User{Name: "Ann", age: 30})
fmt.Println(string(b))
}整形された出力
json.MarshalIndentはJSONをインデント付きで整形します。タグを適用しながら、読みやすいログを作成するのに便利です。
package main
import (
"encoding/json"
"fmt"
)
type User struct {
Name string "json:\"name\""
}
func main() {
b, _ := json.MarshalIndent(User{"Ann"}, "", " ")
fmt.Println(string(b))
}クイックチェック
jsonタグの,omitemptyオプションは何をしますか?
まとめ
JSONタグはマーシャリングを制御します。
json:"name"でキー名を変更します,omitemptyはゼロ値を省略します-はフィールドを無視し、,stringは数値を引用符で囲みます- 公開フィールドのみがエンコードされます
よくある質問
「JSONタグ」レッスンは無料ですか?
はい。「JSONタグ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。
「JSONタグ」で何を学びますか?
マーシャリングを制御します ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Go Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「JSONタグ」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このGo Academyレッスンでコードを書いて実行できますか?
はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。