>백엔드 개발 >Golang >Go 언어 문서 해석: 인코딩/json.Encoder 유형에 대한 자세한 설명

Go 언어 문서 해석: 인코딩/json.Encoder 유형에 대한 자세한 설명

WBOY
WBOY원래의
2023-11-03 15:13:181021검색

Go 언어 문서 해석: 인코딩/json.Encoder 유형에 대한 자세한 설명

Go 언어에서 인코딩/json 패키지는 JSON(JavaScript Object Notation) 형식의 데이터를 처리하기 위한 표준 라이브러리입니다. 이 라이브러리에는 Go 언어의 구조나 기타 데이터 유형을 JSON 형식을 따르는 바이너리 데이터로 인코딩할 수 있는 Encoder 유형이 제공됩니다. 이 문서에서는 이 유형을 자세히 설명하고 구체적인 코드 예제를 제공합니다.

Encoder 유형 정의

Encoder 유형 정의를 먼저 살펴보겠습니다.

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

정의에서 볼 수 있듯이 Encoder 유형은 다음 4개 필드가 있는 구조체 유형입니다.

  • w: 사용됨 출력 인코딩의 경우 최종 데이터의 io.Writer 인터페이스
  • err: 인코딩 과정에서 발생할 수 있는 오류 정보를 기록합니다.
  • h: 인코딩 매개변수 및 캐시를 저장하는 데 사용되는 encodeState 구조
  • generic: 태그 인코더가 범용을 지원하는지 여부 인코딩 태그

Encoder 유형 메소드

Encoder 유형은 다음 메소드를 제공합니다.

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 인터페이스{}) error

Encode 메서드는 들어오는 데이터 유형(v)을 JSON으로 인코딩하고 인코딩 결과를 Encoder 인스턴스 개체의 io.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 인코딩 출력의 들여쓰기 형식을 설정하는 데 사용되며 각각 "prefix"와 "indent"를 나타내는 두 개의 문자열 매개변수를 받습니다. 다음은 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 형식 데이터를 영화에 씁니다. .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 태그를 원래 문자열 형식으로 출력합니다.

요약

인코더 유형은 Go 언어의 인코딩/json 패키지에서 JSON 인코딩에 사용되는 핵심 유형으로, JSON 형식 데이터의 인코딩 처리를 제공하며, 구현 원리는 구조를 변환하거나 다른 데이터 유형을 바이너리 데이터로 변환하는 것입니다. JSON 형식을 준수하여 지정된 io.Writer에 출력합니다. Encoder 유형을 사용하면 인코딩 매개변수를 설정하고 공개 메소드를 호출하여 JSON 인코딩 및 기타 작업을 수행할 수 있습니다.

위 내용은 Go 언어 문서 해석: 인코딩/json.Encoder 유형에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.