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