package
1.23.0
Repository: https://github.com/shogo82148/std.git
Documentation: pkg.go.dev

# Functions

Compactは、無意味なスペース文字が省略された、JSONエンコードされたsrcをdstに追加します。.
HTMLEscapeは、JSONエンコードされたsrcをdstに追加します。ただし、文字列リテラル内の<, >, &, U+2028およびU+2029 文字は\u003c, \u003e, \u0026, \u2028, \u2029に変更されます。 これにより、JSONはHTMLの<script>タグ内に埋め込むのに安全になります。 歴史的な理由から、ウェブブラウザは<script>タグ内で標準的なHTMLエスケープを尊重しないため、 代替のJSONエンコーディングを使用する必要があります。.
Indentは、JSONエンコードされたsrcのインデント形式をdstに追加します。 JSONオブジェクトまたは配列の各要素は、新しい、インデントされた行で始まり、 その行はprefixで始まり、インデントのネストに応じてindentの1つ以上のコピーが続きます。 dstに追加されるデータは、prefixやインデントで始まらないようになっています。 これにより、他のフォーマットされたJSONデータ内に埋め込むのが容易になります。 srcの先頭の空白文字(スペース、タブ、キャリッジリターン、改行)は削除されますが、 srcの末尾の空白文字は保持され、dstにコピーされます。 例えば、srcが末尾のスペースを持っていない場合、dstも持ちません。 srcが末尾の改行で終わる場合、dstも同様になります。.
Marshalは、vのJSONエンコーディングを返します。 Marshalは、値vを再帰的に走査します。 もし遭遇した値が [Marshaler] を実装しており、 それがnilポインタでない場合、Marshalは [Marshaler.MarshalJSON] を呼び出して JSONを生成します。[Marshaler.MarshalJSON] メソッドが存在しないが、 その値が代わりに [encoding.TextMarshaler] を実装している場合、Marshalは [encoding.TextMarshaler.MarshalText] を呼び出し、その結果をJSON文字列としてエンコードします。 nilポインタの例外は厳密には必要ではありませんが、 [Unmarshaler.UnmarshalJSON] の振る舞いにおける同様の、必要な例外を模倣します。 それ以外の場合、Marshalは以下の型依存のデフォルトエンコーディングを使用します: ブール値はJSONのブール値としてエンコードされます。 浮動小数点数、整数、および [Number] の値はJSONの数値としてエンコードされます。 NaNおよび+/-Infの値は [UnsupportedValueError] を返します。 文字列の値は、無効なバイトをUnicodeの置換文字に置き換えて、 有効なUTF-8に強制されたJSON文字列としてエンコードされます。 JSONがHTMLの<script>タグ内に埋め込んでも安全であるように、 文字列は [HTMLEscape] を使用してエンコードされ、 "<", ">", "&", U+2028, および U+2029 が "\u003c","\u003e", "\u0026", "\u2028", および "\u2029" にエスケープされます。 この置換は、[Encoder] を使用している場合、[Encoder.SetEscapeHTML](false)を呼び出すことで無効にできます。 配列とスライスの値はJSON配列としてエンコードされますが、 []byteはbase64エンコードされた文字列としてエンコードされ、 nilスライスはnullのJSON値としてエンコードされます。 構造体の値はJSONオブジェクトとしてエンコードされます。 エクスポートされた各構造体フィールドは、オブジェクトのメンバーとなり、 フィールド名がオブジェクトキーとして使用されます。ただし、以下に示す理由のいずれかでフィールドが省略される場合があります。 各構造体フィールドのエンコーディングは、構造体フィールドのタグの"json"キーの下に格納された フォーマット文字列によってカスタマイズできます。 フォーマット文字列はフィールド名を指定し、それに続いてカンマで区切られたオプションのリストが続く可能性があります。 デフォルトのフィールド名を上書きせずにオプションを指定するために、名前は空にすることができます。 "omitempty"オプションは、フィールドが空の値を持つ場合、 エンコーディングからそのフィールドを省略することを指定します。 空の値とは、false、0、nilポインタ、nilインターフェース値、 そして任意の空の配列、スライス、マップ、または文字列を指します。 特別なケースとして、フィールドタグが"-"の場合、フィールドは常に省略されます。 フィールド名が"-"のフィールドでも、タグ"-,"を使用して生成することができることに注意してください。 構造体フィールドタグの例とその意味: // フィールドはJSONでキー"myName"として現れます。 Field int `json:"myName"` // フィールドはJSONでキー"myName"として現れ、 // フィールドの値が空の場合、オブジェクトから省略されます。 // 上記で定義されているように。 Field int `json:"myName,omitempty"` // フィールドはJSONでキー"Field"(デフォルト)として現れますが、 // フィールドが空の場合はスキップされます。 // 先頭のカンマに注意してください。 Field int `json:",omitempty"` // フィールドはこのパッケージによって無視されます。 Field int `json:"-"` // フィールドはJSONでキー"-"として現れます。 Field int `json:"-,"` "string"オプションは、フィールドがJSONエンコードされた文字列内にJSONとして格納されることを示します。 これは、文字列、浮動小数点数、整数、またはブール型のフィールドにのみ適用されます。 この追加のエンコーディングレベルは、JavaScriptプログラムと通信する際に時々使用されます: Int64String int64 `json:",string"` キー名は、Unicodeの文字、数字、および引用符、バックスラッシュ、カンマを除くASCIIの句読点のみで構成される 空でない文字列の場合に使用されます。 埋め込まれた構造体のフィールドは、通常、その内部のエクスポートされたフィールドが 外部の構造体のフィールドであるかのようにマーシャルされます。これは、次の段落で説明されるように 通常のGoの可視性ルールを修正したものに従います。 JSONタグで名前が指定された匿名の構造体フィールドは、匿名ではなく、その名前を持つものとして扱われます。 インターフェース型の匿名の構造体フィールドは、匿名ではなく、その型の名前を持つものとして同様に扱われます。 構造体フィールドのマーシャルまたはアンマーシャルを決定する際に、 JSONに対してGoの可視性ルールが修正されます。 同じレベルに複数のフィールドが存在し、そのレベルが最もネストが少ない (したがって、通常のGoのルールによって選択されるネストレベル)場合、 次の追加のルールが適用されます: 1) それらのフィールドの中で、JSONタグが付けられているものがある場合、 それ以外に競合する未タグのフィールドが複数あっても、タグ付きのフィールドのみが考慮されます。 2) フィールドが1つだけ(最初のルールに従ってタグ付けされているかどうか)存在する場合、それが選択されます。 3) それ以外の場合、複数のフィールドが存在し、すべてが無視されます。エラーは発生しません。 匿名の構造体フィールドの扱いはGo 1.1で新しくなりました。 Go 1.1より前では、匿名の構造体フィールドは無視されていました。現在のバージョンと以前のバージョンの両方で 匿名の構造体フィールドを強制的に無視するには、フィールドにJSONタグ "-" を付けてください。 マップの値はJSONオブジェクトとしてエンコードされます。マップのキーの型は、 文字列、整数型、または [encoding.TextMarshaler] を実装する必要があります。マップのキーは ソートされ、上記の文字列値に対するUTF-8の強制に従って、以下のルールを適用して JSONオブジェクトのキーとして使用されます: - 任意の文字列型のキーは直接使用されます - [encoding.TextMarshalers] を実装しているキーはマーシャルされます - 整数キーは文字列に変換されます ポインタ値は指している値としてエンコードされます。 nilポインタはnullのJSON値としてエンコードされます。 インターフェースの値は、インターフェースに含まれる値としてエンコードされます。 nilのインターフェース値は、nullのJSON値としてエンコードされます。 チャネル、複素数、および関数の値はJSONでエンコードすることはできません。 そのような値をエンコードしようとすると、Marshalは [UnsupportedTypeError] を返します。 JSONは循環データ構造を表現することはできませんし、Marshalはそれらを処理しません。 循環構造をMarshalに渡すとエラーが発生します。.
MarshalIndentは [Marshal] と同様ですが、出力のフォーマットに [Indent] を適用します。 出力の各JSON要素は、インデントのネストに従ってprefixで始まり、 その後にindentの1つ以上のコピーが続く新しい行で始まります。.
NewDecoderは、rから読み取る新しいデコーダを返します。 デコーダは自身のバッファリングを導入し、 要求されたJSON値を超えてrからデータを読み取る可能性があります。.
NewEncoderは、wに書き込む新しいエンコーダを返します。.
Unmarshalは、JSONエンコードされたデータを解析し、結果をvが指す値に格納します。 もしvがnilまたはポインタでない場合、Unmarshalは [InvalidUnmarshalError] を返します。 Unmarshalは、[Marshal] が使用するエンコーディングの逆を使用し、 必要に応じてマップ、スライス、ポインタを割り当てます。 以下の追加ルールも適用されます: JSONをポインタにアンマーシャルするために、Unmarshalはまず JSONがJSONリテラルnullであるケースを処理します。その場合、Unmarshalは ポインタをnilに設定します。それ以外の場合、UnmarshalはJSONを ポインタが指す値にアンマーシャルします。もしポインタがnilなら、Unmarshalは それが指す新しい値を割り当てます。 [Unmarshaler] インターフェースを実装する値にJSONをアンマーシャルするために、 Unmarshalはその値の [Unmarshaler.UnmarshalJSON] メソッドを呼び出します、 入力がJSON nullである場合も含みます。 それ以外の場合、もし値が [encoding.TextUnmarshaler] を実装していて、 入力がJSONの引用符で囲まれた文字列である場合、Unmarshalはその値の [encoding.TextUnmarshaler.UnmarshalText] を引用符で囲まれていない形式の文字列で呼び出します。 JSONを構造体にアンマーシャルするために、Unmarshalは受信したオブジェクトの キーをMarshalが使用するキー(構造体のフィールド名またはそのタグ)と一致させます。 これは完全一致を優先しますが、大文字小文字を区別しない一致も受け入れます。 デフォルトでは、対応する構造体のフィールドがないオブジェクトのキーは無視されます (代替として [Decoder.DisallowUnknownFields] を参照してください)。 インターフェース値にJSONをアンマーシャルするために、 Unmarshalは以下のいずれかをインターフェース値に格納します: - bool, for JSON booleans - float64, for JSON numbers - string, for JSON strings - []any, for JSON arrays - map[string]any, for JSON objects - nil for JSON null JSON配列をスライスにアンマーシャルするために、Unmarshalはスライスの長さを ゼロにリセットし、各要素をスライスに追加します。 特別なケースとして、空のJSON配列をスライスにアンマーシャルするために、 Unmarshalはスライスを新しい空のスライスで置き換えます。 Goの配列にJSON配列をアンマーシャルするために、Unmarshalは JSON配列の要素を対応するGoの配列の要素にデコードします。 もしGoの配列がJSON配列より小さい場合、 追加のJSON配列の要素は破棄されます。 もしJSON配列がGoの配列より小さい場合、 追加のGoの配列の要素はゼロ値に設定されます。 JSONオブジェクトをマップにアンマーシャルするために、Unmarshalは最初に使用するマップを確立します。 マップがnilの場合、Unmarshalは新しいマップを割り当てます。それ以外の場合、Unmarshalは 既存のマップを再利用し、既存のエントリを保持します。次に、UnmarshalはJSONオブジェクトから キーと値のペアをマップに格納します。マップのキーの型は、任意の文字列型、整数、 または [encoding.TextUnmarshaler] を実装するものでなければなりません。 もしJSONエンコードされたデータに構文エラーが含まれている場合、Unmarshalは [SyntaxError] を返します。 もしJSON値が特定のターゲット型に適していない場合、 またはJSON数値がターゲット型をオーバーフローする場合、Unmarshalは そのフィールドをスキップし、可能な限りアンマーシャルを完了します。 もしもっと深刻なエラーが発生しなければ、Unmarshalは最初のそのようなエラーを 説明する [UnmarshalTypeError] を返します。いずれにせよ、問題のあるフィールドに続く すべてのフィールドがターゲットオブジェクトにアンマーシャルされることは保証されません。 JSONのnull値は、そのGoの値をnilに設定することでインターフェース、マップ、ポインタ、スライスにアンマーシャルされます。 nullはJSONで「存在しない」を意味することが多いため、JSONのnullを他のGoの型にアンマーシャルすると、 値には影響せず、エラーも発生しません。 引用符で囲まれた文字列をアンマーシャルするとき、無効なUTF-8または 無効なUTF-16サロゲートペアはエラーとして扱われません。 代わりに、それらはUnicodeの置換文字U+FFFDに置き換えられます。.
Validは、dataが有効なJSONエンコーディングであるかどうかを報告します。.

# Structs

Decoderは、入力ストリームからJSON値を読み取り、デコードします。.
Encoderは、JSON値を出力ストリームに書き込みます。.
InvalidUnmarshalErrorは、[Unmarshal] に渡された無効な引数を説明します。 ([Unmarshal] への引数はnilでないポインタでなければなりません。).
Go 1.2より前では、InvalidUTF8Errorは、無効なUTF-8シーケンスを含む文字列値をエンコードしようとしたときに [Marshal] によって返されました。Go 1.2以降では、[Marshal] は代わりに無効なバイトをUnicodeの置換ルーンU+FFFDで 置き換えることにより、文字列を有効なUTF-8に強制します。 Deprecated: もう使用されていません。互換性のために保持されています。.
MarshalerErrorは、[Marshaler.MarshalJSON] または [encoding.TextMarshaler.MarshalText] メソッドを呼び出す際のエラーを表します。.
SyntaxErrorは、JSON構文エラーの説明です。 JSONを解析できない場合、[Unmarshal] はSyntaxErrorを返します。.
UnmarshalFieldErrorは、JSONオブジェクトキーが エクスポートされていない(したがって書き込み不可能な)構造体フィールドにつながることを説明します。 Deprecated: もはや使用されていません。互換性のために保持されています。.
UnmarshalTypeErrorは、特定のGo型の値に対して適切でないJSON値を説明します。.
UnsupportedTypeErrorは、サポートされていない値の型をエンコードしようとしたときに [Marshal] によって返されます。.
UnsupportedValueErrorは、サポートされていない値をエンコードしようとしたときに [Marshal] によって返されます。.

# Interfaces

Marshalerは、自身を有効なJSONにマーシャルできる型が実装するインターフェースです。.
Unmarshalerは、自分自身のJSON記述をアンマーシャルできる型によって実装されるインターフェースです。 入力は、JSON値の有効なエンコーディングであると想定できます。 UnmarshalJSONは、戻り値後にデータを保持したい場合、JSONデータをコピーする必要があります。 慣習的に、[Unmarshal] 自体の振る舞いを近似するために、 UnmarshalersはUnmarshalJSON([]byte("null"))を何もしない操作として実装します。.

# Type aliases

Delimは、JSON配列またはオブジェクトの区切り文字であり、[ ] { }のいずれかです。.
Numberは、JSONの数値リテラルを表します。.
RawMessageは、生のエンコードされたJSON値です。 これは [Marshaler] と [Unmarshaler] を実装しており、 JSONのデコードを遅延させるか、JSONのエンコードを事前に計算するために使用できます。.
Tokenは、以下の型のいずれかの値を保持します: - [Delim]、JSONの4つの区切り文字 [ ] { } のため - bool、JSONのブール値のため - float64、JSONの数値のため - [Number]、JSONの数値のため - string、JSONの文字列リテラルのため - nil、JSONのnullのため.