ホームページ >バックエンド開発 >Golang >Go言語ドキュメント解釈:エンコーディング/json.Encoder型の詳細説明

Go言語ドキュメント解釈:エンコーディング/json.Encoder型の詳細説明

WBOY
WBOYオリジナル
2023-11-03 15:13:181023ブラウズ

Go言語ドキュメント解釈:エンコーディング/json.Encoder型の詳細説明

Go 言語では、encoding/json パッケージは、JSON (JavaScript Object Notation) 形式でデータを処理するための標準ライブラリです。このライブラリでは、Go 言語の構造体やその他のデータ型を JSON 形式に準拠したバイナリ データにエンコードできる Encoder 型が提供されています。この記事では、このタイプについて詳しく説明し、具体的なコード例を示します。

エンコーダ型の定義

まずエンコーダ型の定義を見てみましょう:

type Encoder struct {
    w       io.Writer
    err     error
    h       *encodeState
    generic bool
}

定義からわかるように、エンコーダ型は構造体型です。には、次の 4 つのフィールドが含まれます:

  • w: エンコードされたデータの出力に使用される io.Writer インターフェイス
  • err: エンコード プロセス中に発生する可能性のあるエラー情報を記録します
  • h :エンコードパラメータとキャッシュを保存するために使用される encodeState 構造体
  • #generic:エンコーダが一般的なエンコードをサポートするかどうかをマークする

エンコーダ タイプ メソッド

エンコーダ タイプ 以下

func NewEncoder(w io.Writer) *Encoder

NewEncoder メソッドは、Encoder 型のインスタンスを作成するために使用され、io.Writer インターフェイス オブジェクトを として渡す必要があります。パラメータ 。以下は、Encoder インスタンスを作成するサンプル コードです。

package main

import (
    "encoding/json"
    "os"
)

func main() {
    type Movie struct {
        Title  string
        Year   int
        Actors []string
    }

    movie := Movie{
        Title:  "Inception",
        Year:   2010,
        Actors: []string{"Leonardo DiCaprio", "Ellen Page", "Tom Hardy"},
    }

    encoder := json.NewEncoder(os.Stdout)
    encoder.Encode(movie)
}

上記のサンプル コードでは、Movie タイプの構造体インスタンスを作成し、エンコードして標準出力に出力します。

func (enc *Encoder) Encode(v Interface{}) error

Encode メソッドは、受信データ型 (v) を JSON エンコードし、エンコード結果を io に書き込むために使用されます。 Encoder インスタンス オブジェクトの .Writer。エンコード中にエラーが発生した場合は、対応するエラー メッセージが返されます。以下は、Encode メソッドのサンプル コードです。

package main

import (
    "encoding/json"
    "os"
)

func main() {
    type Movie struct {
        Title  string
        Year   int
        Actors []string
    }

    movie := Movie{
        Title:  "Inception",
        Year:   2010,
        Actors: []string{"Leonardo DiCaprio", "Ellen Page", "Tom Hardy"},
    }

    file, _ := os.Create("movie.json")
    encoder := json.NewEncoder(file)
    encoder.Encode(movie)
    file.Close()
}

上記のサンプル コードでは、Movie タイプの構造体インスタンスを作成し、エンコードして、movie.json ファイルに書き込みます。

func (enc *Encoder) SetIndent(prefix, indent string)

SetIndent メソッドは、JSON エンコードされた出力のインデント形式を設定するために使用されます。このメソッドは、「プレフィックス」を表す 2 つの文字列パラメータを受け取ります」と「インデント」。以下は SetIndent メソッドのサンプル コードです。

package main

import (
    "encoding/json"
    "os"
)

func main() {
    type Movie struct {
        Title  string
        Year   int
        Actors []string
    }

    movie := Movie{
        Title:  "Inception",
        Year:   2010,
        Actors: []string{"Leonardo DiCaprio", "Ellen Page", "Tom Hardy"},
    }

    file, _ := os.Create("movie.json")
    encoder := json.NewEncoder(file)
    encoder.SetIndent("", "    ")
    encoder.Encode(movie)
    file.Close()
}

上記のサンプル コードでは、SetIndent メソッドを使用してインデント プレフィックスを空に設定し、文字列を 4 つのスペースでインデントし、エンコードされた JSON をフォーマットします。データは movie.json ファイルに書き込まれます。

func (enc *Encoder) SetEscapeHTML(on bool)

SetEscapeHTML メソッドは、Encoder インスタンス オブジェクトが HTML タグをエスケープする必要があるかどうかを設定するために使用されます。デフォルト値は true です。 on パラメータが true の場合、HTML タグはエスケープされ、on パラメータが false の場合、出力は元の文字列形式になります。以下は SetEscapeHTML メソッドのサンプル コードです。

package main

import (
    "encoding/json"
    "os"
)

func main() {
    type Example struct {
        Name     string
        HTMLBody string `json:"body"`
    }

    example := Example{
        Name:     "example",
        HTMLBody: "<h1>This is a heading</h1>
<p>This is a paragraph.</p>",
    }

    file, _ := os.Create("example.json")
    encoder := json.NewEncoder(file)
    encoder.SetEscapeHTML(false)
    encoder.Encode(example)
    file.Close()
}

上記のサンプル コードでは、SetEscapeHTML メソッドを使用して HTML タグを元の文字列形式に出力します。

概要

Encoder型はGo言語のencoding/jsonパッケージにおけるJSONエンコードに使用されるコア型であり、JSON形式のデータのエンコード処理を提供します。 Go 言語の構造体やその他のデータ型を JSON 形式のバイナリ データに変換し、指定された io.Writer に出力します。 Encoder タイプを使用する場合、そのパブリック メソッドを呼び出すことで、エンコード パラメーターを設定し、JSON エンコードやその他の操作を実行できます。

以上がGo言語ドキュメント解釈:エンコーディング/json.Encoder型の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。