>백엔드 개발 >Golang >Go에서 언마샬링할 때 여러 JSON 부울 표현을 처리하는 방법은 무엇입니까?

Go에서 언마샬링할 때 여러 JSON 부울 표현을 처리하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-09 00:19:15313검색

How to Handle Multiple JSON Boolean Representations When Unmarshalling in Go?

다중 표현을 사용하여 JSON 부울 역마샬링

JSON을 부울 유형으로 역마샬링할 때 내장된 인코딩/json 역정렬 함수는 다음과 같은 값을 예상합니다. "참"과 "거짓"으로. 그러나 특정 서비스에서는 부울 유형에 대해 "0"과 "false"(및 "1"과 "true")를 교환할 수 있습니다.

이러한 유연성을 수용하기 위해 다음을 변환하는 사용자 정의 역마샬링 함수를 생성할 수 있습니다. "0", "1", "false" 및 "true"와 같은 문자열 값을 원하는 부울 표현으로 변환합니다.

다음은 여러 표현으로 부울 값을 비정렬화하는 데 사용할 수 있는 사용자 정의 유형 ConvertibleBoolean:

import (
    "encoding/json"
    "errors"
)

type ConvertibleBoolean bool

func (bit *ConvertibleBoolean) UnmarshalJSON(data []byte) error {
    asString := string(data)
    if asString == "1" || asString == "true" {
        *bit = true
    } else if asString == "0" || asString == "false" {
        *bit = false
    } else {
        return errors.New(fmt.Sprintf("Boolean unmarshal error: invalid input %s", asString))
    }
    return nil
}

이 사용자 정의 유형을 사용하면 ConvertibleBoolean 유형의 필드로 구조체를 정의하고 "0" 및 "false를 포함하는 JSON 데이터를 비정렬화할 수 있습니다. "를 부울로:

type MyType struct {
    AsBoolean ConvertibleBoolean `json:"field1"`
    AlsoBoolean ConvertibleBoolean `json:"field2"`
}

변환 가능한 부울 값으로 입력 JSON을 비정렬화하면, 구조체의 ConvertibleBoolean 필드가 올바르게 채워집니다.

input_json := `{
    "field1" : true,
    "field2" : 1
}`

obj := MyType{}
json_err := json.Unmarshal([]byte(input_json), &obj)
fmt.Printf("%v\n", obj.AsBoolean) //"true"
fmt.Printf("%v\n", obj.AlsoBoolean) //"true"

ConvertibleBoolean과 같은 사용자 정의 역마샬링 함수를 사용하면 Go 구조체로 역마샬링할 때 JSON 데이터의 여러 표현으로 부울 값을 처리할 수 있습니다.

위 내용은 Go에서 언마샬링할 때 여러 JSON 부울 표현을 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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