>백엔드 개발 >Golang >\'0\' 및 \'false\'(및 \'1\' 및 \'true\')를 사용하여 JSON에서 부울 비정렬화를 처리하는 방법은 무엇입니까?

\'0\' 및 \'false\'(및 \'1\' 및 \'true\')를 사용하여 JSON에서 부울 비정렬화를 처리하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-26 10:11:13121검색

How to Handle Boolean Unmarshalling from JSON with

0과 False를 모두 사용하여 JSON에서 부울 값 비정렬화

JSON 데이터를 구문 분석하려면 잘못된 해석을 피하기 위해 데이터 유형을 신중하게 고려해야 합니다. 서비스가 부울 값을 0과 false(1과 true는 물론)로 교환하는 경우 적절한 역마샬링을 달성하는 것이 중요합니다.

내장된 인코딩/json 패키지는 사용자 정의 유형을 사용하여 역마샬링 프로세스를 사용자 정의하는 방법을 제공합니다. . 사용자 정의 유형을 정의하면 맞춤형 역마샬링 논리를 구현하여 원하는 변환을 처리할 수 있습니다.

사용자 정의 역마샬링 유형

json.Unmarshaler 인터페이스를 구현하는 사용자 정의 유형을 생성합니다. . 이 유형은 JSON 데이터를 원하는 부울 형식으로 변환하는 역할을 합니다.

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은 json.Unmarshaler 인터페이스를 구현하는 사용자 정의 부울 유형입니다. 기본 JSON 역마샬링 프로세스를 재정의하고 들어오는 데이터를 문자열로 확인합니다. true 또는 false(또는 해당 숫자 1과 0)를 나타내는 문자열을 식별하는 경우 그에 따라 ConvertibleBoolean 값을 설정합니다. 그렇지 않으면 오류가 반환됩니다.

사용자 정의 유형 사용

이제 사용자 정의 언마샬링 유형이 있으므로 구조체에서 이를 사용하여 예상 JSON 구조를 정의합니다.

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

예시 역마샬링

사용자 정의 유형을 사용하면 JSON 데이터를 MyType 구조체로 역마샬링하여 0과 false(1과 true도 포함)를 부울 값으로 올바르게 변환할 수 있습니다.

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"

이 JSON 데이터 예제에는 "true"와 "1"이 포함되어 있으며, 이는 기본 언마샬러에 의해 다른 유형으로 처리됩니다. 그러나 ConvertibleBoolean을 사용하면 두 값 모두 true로 올바르게 역마샬링됩니다.

위 내용은 \'0\' 및 \'false\'(및 \'1\' 및 \'true\')를 사용하여 JSON에서 부울 비정렬화를 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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