> 백엔드 개발 > Golang > 모호한 부울 값을 처리하기 위해 JSON 역마샬링을 사용자 정의하려면 어떻게 해야 합니까?

모호한 부울 값을 처리하기 위해 JSON 역마샬링을 사용자 정의하려면 어떻게 해야 합니까?

Barbara Streisand
풀어 주다: 2024-11-29 05:49:09
원래의
187명이 탐색했습니다.

How Can I Customize JSON Unmarshaling to Handle Ambiguous Boolean Values?

JSON 언마샬링에서 부울 구문 분석 옵션 확장

부울 유형과 다른 값 사이의 경계를 모호하게 만드는 서비스 출력을 매핑할 때 더 수용적인 JSON 파서는 필수가 됩니다. 내장된 인코딩/json 비정렬 함수는 이 점에서 부족하여 허용적인 구문 분석 대안을 검색하라는 메시지를 표시합니다.

한 가지 접근 방식은 원하는 유형에 대한 사용자 정의 UnmarshalJSON 함수를 만드는 것입니다. 이 함수는 모호한 부울 값을 처리하기 위해 사용자 정의 구문 분석 규칙을 정의할 수 있습니다. 예를 들어 다음 ConvertibleBoolean 유형을 고려해 보세요.

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
}
로그인 후 복사

이 함수에서 문자열 "1"과 "true"는 true로 매핑되고 "0"과 "false"는 false로 구문 분석됩니다. 이 범위를 벗어나는 값은 오류를 유발합니다.

이 사용자 정의 부울 구문 분석을 활용하려면 대상 필드에 json 태그를 적용하세요. 예:

type MyType struct {
    AsBoolean ConvertibleBoolean `json:"field1"`
    AlsoBoolean ConvertibleBoolean `json:"field2"`
}
로그인 후 복사

이러한 사용자 정의 구문 분석 규칙이 적용되면 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"
로그인 후 복사

By 사용자 정의 구문 분석 기능을 활용하면 JSON 역마샬링의 유연성을 얻을 수 있으므로 모호한 부울 값을 다음과 같이 처리할 수 있습니다. 필요합니다.

위 내용은 모호한 부울 값을 처리하기 위해 JSON 역마샬링을 사용자 정의하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿