import "json"

jsonパッケージは、RFC4627で規定されているJSONオブジェクトのエンコードおよびデコードを実装しています。

パッケージファイル

decode.go encode.go indent.go scanner.go stream.go

Compact関数

func Compact(dst *bytes.Buffer, src []byte) os.Error

Compactは、JSONエンコードされているsrcから不要な空白文字を省き、dstに追加します。

HTMLEscape関数

func HTMLEscape(dst *bytes.Buffer, src []byte)

HTMLEscapeは、JSONエンコードされているsrcを、HTMLの<script>タグ内に埋め込んだときに問題を起こさないように、文字列リテラル内の<、>、&の各文字をそれぞれ\u003c、\u003e、\u0026に変換してdstに追加します。ウェブブラウザは歴史的な理由から、scriptタグ内では標準HTMLのエスケープ規則を守らないため、JSONエンコードの代替が必要とされます。

Indent関数

func Indent(dst *bytes.Buffer, src []byte, prefix, indent string) os.Error

Indentは、JSONエンコードされているsrcをインデント形式で、dstに追加します。JSONオブジェクト内、または配列内の各要素は、新たなインデントされた行で開始します。この行の先頭はprefixで、その後ろに、インデントのネストに応じてひとつ以上のindentのコピーが続きます。dstに追加されるデータは、フォーマット化された他のJSONデータ内に簡単に埋め込めるように、後ろには改行を伴いません。

Marshal関数

func Marshal(v interface{}) ([]byte, os.Error)

Marshalは、vのJSONエンコードを返します。

Marshalは、値vを再帰的に処理します。Marshalは、Marshalerインタフェースを実装した値を見つけると、JSONデータを得るために、その値のMarshalJSONメソッドを呼び出します。

それ以外の場合、Marshalは、下に示す通りに型に規定されているデフォルトのエンコーディングを使用します。

論理値は、「JSON論理値」としてエンコードされます。

浮動小数点と整数値は、「JSON数値」としてエンコードされます。

文字列値は、「JSON文字列」としてエンコードされます。このとき不正なUTF-8シーケンスは、それぞれUnicode replacement文字(U+FFFD)をエンコードした値で置き換えられます。

配列とスライスの値は、「JSON配列」としてエンコードされます。

構造体の値は、「JSONオブジェクト」としてエンコードされます。構造体の各フィールドは、そのオブジェクトのメンバーになります。そのオブジェクトのキー名は、デフォルトでは、小文字に変換した構造体のフィールド名ですが、構造体のフィールドがタグを持つときは、そのタグが名前として使用されます。

マップの値は、「JSONオブジェクト」としてエンコードされます。マップのキー型は文字列型でなければなりません。オブジェクトのキーには、マップのキーがそのまま使用されます。

ポインタの値は、ポインタが示す値がエンコードされます。nilポインタは、nullの「JSONオブジェクト」としてエンコードされます。

インタフェースの値は、そのインタフェースに格納されている値がエンコードされます。nilインタフェース値は、nullの「JSONオブジェクト」としてエンコードされます。

チャネル、複素数、関数の値は、JSONエンコードできません。これらの値をエンコードしようとすると、Marshalは、InvalidTypeErrorを返します。

JSONでは、再帰的なデータ構造を表現できず、Marshalもこれを取り扱うことができません。再帰的な構造体をMarshalに渡すと、無限に再帰処理が行われます。

MarshalForHTML関数

func MarshalForHTML(v interface{}) ([]byte, os.Error)

MarshalForHTMLは、Marshalと同じですが、出力にHTMLEscapeを適用します。

MarshalIndent関数

func MarshalIndent(v interface{}, prefix, indent string) ([]byte, os.Error)

MarshalIndentは、Marshalと同じですが、出力にインデント形式を使います。

Unmarshal関数

func Unmarshal(data []byte, v interface{}) os.Error

Unmarshalは、JSONエンコードされたデータをを解析し、結果をvで示す値に格納します。

Unmarshalは、値vを再帰的に処理します。Unmarshalは、Unmarshalerインタフェースを実装した値を見つけると、その値のUnmarshalJSONメソッドを、それに適したJSONエンコードとともに呼び出します。

それ以外の場合、Unmarshalは、Marshalで使用するエンコーディングの逆と、下に示す追加ルールを使い、必要に応じ、マップ、スライス、ポインタを割り当てます。

JSONの値をnilインタフェース値にアンマーシャルする際、そのインタフェース値に格納される型は、次のいずれかになります。

bool JSON論理値のとき
float64 JSON数値のとき
string JSON文字列の時
[]interface{} JSON配列のとき
map[string]interface{} JSONオブジェクトのとき
nil JSON nullのとき

JSONの値が、指定した型に対し適切でないとき、またはJSONの数値が、指定した型でオーバフローを起こすとき、Unmarshalは、そのフィールドをスキップし、できる限り解析を完了させます。Unmarshalは、重大なエラーが起きていなければ、最初に起きたエラーの情報を格納したUnmarshalTypeErrorを返します。

Decoder型

Decoderは、入力ストリームのJSONオブジェクトを呼び出し、デコードします。

type Decoder struct {
    // contains unexported fields
}

NewDecoder関数

func NewDecoder(r io.Reader) *Decoder

NewDecoderは、rから読み込みを行う、新しいDecoderを返します。

(*Decoder) Decode関数

func (dec *Decoder) Decode(v interface{}) os.Error

Decodeは、この接続(Reader)からJSONエンコードされた次の値を読み込み、それをvで示す値に格納します。

JSONからGoの値への変換についての詳細は、Unmarshalのドキュメントを参照ください。

Encoder型

Encoderは、出力ストリームにJSONオブジェクトを書き込みます。

type Encoder struct {
    // contains unexported fields
}

NewEncoder関数

func NewEncoder(w io.Writer) *Encoder

NewEncoderは、wに書き込みを行う、新しいEncoderを返します。

(*Encoder) Encode関数

func (enc *Encoder) Encode(v interface{}) os.Error

Encodeは、vのJSONエンコーディングを接続(Writer)に書き込みます。

Goの値からJSONへの変換についての詳細は、Marshalのドキュメントを参照ください。

InvalidUnmarshalError型

InvalidUnmarshalErrorは、Unmarshalに不正な引数が渡されたことを表します。(Unmarshalへの引数は、非nilポインタである必要があります)

type InvalidUnmarshalError struct {
    Type reflect.Type
}

(*InvalidUnmarshalError) String関数

func (e *InvalidUnmarshalError) String() string

Marshaler型

Marshalerは、自分自身を有効なJSONへマーシャル可能なオブジェクトによって実装されるインタフェースです。

type Marshaler interface {
    MarshalJSON() ([]byte, os.Error)
}

MarshalerError型

type MarshalerError struct {
    Type  reflect.Type
    Error os.Error
}

(*MarshalerError) String関数

func (e *MarshalerError) String() string

RawMessage型

RawMessageは、エンコードされた生のJSONオブジェクトです。これは、MarshalerとUnmarshalerを実装し、遅延JSONデコーディングまたは、事前JSONエンコーディングに利用可能です。

type RawMessage []byte

(*RawMessage) MarshalJSON関数

func (m *RawMessage) MarshalJSON() ([]byte, os.Error)

MarshalJSONは、*mをJSONエンコーディングとして返します。

(*RawMessage) UnmarshalJSON関数

func (m *RawMessage) UnmarshalJSON(data []byte) os.Error

UnmarshalJSONは、データのコピーを*mにセットします。

SyntaxError型

SyntaxErrorは、JSONの文法エラーを表します。

type SyntaxError string

(SyntaxError) String関数

func (e SyntaxError) String() string

UnmarshalFieldError型

UnmarshalFieldErrorは、エクスポートされていない(よって、書き込めない)構造体フィールドへのアクセス要因となったJSONオブジェクトのキーを表します。

type UnmarshalFieldError struct {
    Key   string
    Type  *reflect.StructType
    Field reflect.StructField
}

(*UnmarshalFieldError) String関数

func (e *UnmarshalFieldError) String() string

UnmarshalTypeError型

UnmarshalTypeErrorは、Goの型で規定されている値に対し、JSONの値が適切でないことを表します。

type UnmarshalTypeError struct {
    Value string       // JSONの値 - "bool", "array", "number -5"
    Type  reflect.Type // 代入できなかったGoの値の型
}

(*UnmarshalTypeError) String関数

func (e *UnmarshalTypeError) String() string

Unmarshaler型

Unmarshalerは、自分自身でJSONをアンマーシャル可能なオブジェクトによって実装されるインタフェースです。入力は、エンコードされた有効なJSONオブジェクトであるとみなされます。JSONデータを保持しておきたいときは、この関数から戻った後、データをコピーする必要があります。

type Unmarshaler interface {
    UnmarshalJSON([]byte) os.Error
}

UnsupportedTypeError型

type UnsupportedTypeError struct {
    Type reflect.Type
}

(*UnsupportedTypeError) String関数

func (e *UnsupportedTypeError) String() string