Rumah >pembangunan bahagian belakang >Golang >Bagaimana Mengendalikan Berbilang Perwakilan Boolean JSON Apabila Menyahmarshalling dalam Go?

Bagaimana Mengendalikan Berbilang Perwakilan Boolean JSON Apabila Menyahmarshalling dalam Go?

Susan Sarandon
Susan Sarandonasal
2024-12-09 00:19:15318semak imbas

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

Menyahmarshall JSON Booleans dengan Multiple Representation

Apabila menyahmarshall JSON ke dalam jenis boolean, fungsi pengekodan/json unmarshal terbina dalam mengharapkan nilai sedemikian sebagai "benar" dan "salah". Walau bagaimanapun, perkhidmatan tertentu mungkin menukar "0" dan "false" (serta "1" dan "true") untuk jenis boolean.

Untuk menampung fleksibiliti ini, anda boleh membuat fungsi unmarshaling tersuai yang menukar nilai rentetan seperti "0", "1", "false" dan "true" kepada perwakilan boolean yang dikehendaki.

Inilah contoh jenis tersuai ConvertibleBoolean yang boleh digunakan untuk menyahmarshal nilai boolean dengan berbilang perwakilan:

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
}

Dengan jenis tersuai ini, anda boleh menentukan struct dengan medan jenis ConvertibleBoolean dan data JSON unmarshal yang mengandungi "0 " dan "false" sebagai boolean:

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

Setelah membongkar input JSON dengan nilai boolean boleh tukar, medan ConvertibleBoolean dalam struct akan diisi dengan betul:

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"

Dengan menggunakan fungsi unmarshaling tersuai seperti ConvertibleBoolean, adalah mungkin untuk mengendalikan nilai boolean dengan berbilang perwakilan dalam data JSON apabila menyahmarshaling ke dalam Pergi struct.

Atas ialah kandungan terperinci Bagaimana Mengendalikan Berbilang Perwakilan Boolean JSON Apabila Menyahmarshalling dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn