0Pricing
Go Academy · レッスン

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 構造体タグとは
  2. JSONタグ
  3. バリデーションライブラリ
  4. カスタムタグの解析
← Go Academyに戻る