github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/encoding/json/stream.go (about) 1 // Copyright 2010 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package json 6 7 import ( 8 "github.com/shogo82148/std/io" 9 ) 10 11 // Decoderは、入力ストリームからJSON値を読み取り、デコードします。 12 type Decoder struct { 13 r io.Reader 14 buf []byte 15 d decodeState 16 scanp int 17 scanned int64 18 scan scanner 19 err error 20 21 tokenState int 22 tokenStack []int 23 } 24 25 // NewDecoderは、rから読み取る新しいデコーダを返します。 26 // 27 // デコーダは自身のバッファリングを導入し、 28 // 要求されたJSON値を超えてrからデータを読み取る可能性があります。 29 func NewDecoder(r io.Reader) *Decoder 30 31 // UseNumberは、Decoderに数値をfloat64ではなく、 32 // [Number] としてinterface{}にアンマーシャルするよう指示します。 33 func (dec *Decoder) UseNumber() 34 35 // DisallowUnknownFieldsは、デコーダに、宛先が構造体であり、入力に宛先の 36 // いずれの非無視、エクスポートされたフィールドとも一致しないオブジェクトキーが含まれている場合に 37 // エラーを返すよう指示します。 38 func (dec *Decoder) DisallowUnknownFields() 39 40 // Decodeは、入力から次のJSONエンコードされた値を読み取り、 41 // それをvが指す値に格納します。 42 // 43 // JSONをGoの値に変換する詳細については、[Unmarshal] のドキュメンテーションを参照してください。 44 func (dec *Decoder) Decode(v any) error 45 46 // Bufferedは、Decoderのバッファに残っているデータのリーダーを返します。 47 // リーダーは次の [Decoder.Decode] 呼び出しまで有効です。 48 func (dec *Decoder) Buffered() io.Reader 49 50 // Encoderは、JSON値を出力ストリームに書き込みます。 51 type Encoder struct { 52 w io.Writer 53 err error 54 escapeHTML bool 55 56 indentBuf []byte 57 indentPrefix string 58 indentValue string 59 } 60 61 // NewEncoderは、wに書き込む新しいエンコーダを返します。 62 func NewEncoder(w io.Writer) *Encoder 63 64 // Encodeは、vのJSONエンコーディングをストリームに書き込み、 65 // その後に改行文字を追加します。 66 // 67 // Goの値をJSONに変換する詳細については、[Marshal] のドキュメンテーションを参照してください。 68 func (enc *Encoder) Encode(v any) error 69 70 // SetIndentは、エンコーダに対して、次にエンコードされる各値を、パッケージレベルの関数Indent(dst, src, prefix, indent)で 71 // インデントされているかのようにフォーマットするよう指示します。 72 // SetIndent("", "")を呼び出すと、インデントが無効になります。 73 func (enc *Encoder) SetIndent(prefix, indent string) 74 75 // SetEscapeHTMLは、問題のあるHTML文字がJSONの引用符で囲まれた文字列内でエスケープされるべきかどうかを指定します。 76 // デフォルトの動作は、&, <, >を\u0026, \u003c, \u003eにエスケープして、 77 // JSONをHTMLに埋め込む際に生じる可能性のある特定の安全性問題を回避します。 78 // 79 // エスケープが出力の可読性を妨げる非HTML設定では、SetEscapeHTML(false)でこの動作を無効にします。 80 func (enc *Encoder) SetEscapeHTML(on bool) 81 82 // RawMessageは、生のエンコードされたJSON値です。 83 // これは [Marshaler] と [Unmarshaler] を実装しており、 84 // JSONのデコードを遅延させるか、JSONのエンコードを事前に計算するために使用できます。 85 type RawMessage []byte 86 87 // MarshalJSONは、mのJSONエンコーディングとしてmを返します。 88 func (m RawMessage) MarshalJSON() ([]byte, error) 89 90 // UnmarshalJSONは、*mをdataのコピーに設定します。 91 func (m *RawMessage) UnmarshalJSON(data []byte) error 92 93 var _ Marshaler = (*RawMessage)(nil) 94 var _ Unmarshaler = (*RawMessage)(nil) 95 96 // Tokenは、以下の型のいずれかの値を保持します: 97 // 98 // - [Delim]、JSONの4つの区切り文字 [ ] { } のため 99 // - bool、JSONのブール値のため 100 // - float64、JSONの数値のため 101 // - [Number]、JSONの数値のため 102 // - string、JSONの文字列リテラルのため 103 // - nil、JSONのnullのため 104 type Token any 105 106 // Delimは、JSON配列またはオブジェクトの区切り文字であり、[ ] { }のいずれかです。 107 type Delim rune 108 109 func (d Delim) String() string 110 111 // Tokenは、入力ストリームの次のJSONトークンを返します。 112 // 入力ストリームの終わりでは、Tokenはnil, [io.EOF] を返します。 113 // 114 // Tokenは、返す区切り文字[ ] { }が適切にネストされ、 115 // マッチしていることを保証します:もしTokenが入力で予期しない 116 // 区切り文字に遭遇した場合、エラーを返します。 117 // 118 // 入力ストリームは、基本的なJSON値—bool, string, 119 // number, null—と、配列とオブジェクトの開始と終了を 120 // マークするための区切り文字[ ] { }のタイプ [Delim] で構成されています。 121 // コンマとコロンは省略されます。 122 func (dec *Decoder) Token() (Token, error) 123 124 // Moreは、解析中の現在の配列またはオブジェクトに別の要素があるかどうかを報告します。 125 func (dec *Decoder) More() bool 126 127 // InputOffsetは、現在のデコーダ位置の入力ストリームバイトオフセットを返します。 128 // オフセットは、最近返されたトークンの終わりと次のトークンの始まりの位置を示します。 129 func (dec *Decoder) InputOffset() int64