Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Meratakan Output sql.NullString Marshalled dalam Go?

Bagaimana untuk Meratakan Output sql.NullString Marshalled dalam Go?

Barbara Streisand
Barbara Streisandasal
2024-11-28 07:58:14386semak imbas

How to Flatten the Output of a Marshalled sql.NullString in Go?

Bagaimana untuk Meratakan dan Mengeluarkan Nilai Sahaja daripada Marshalled sql.NullString in Go?

Memandangkan struct Golang dengan medan sql.NullString, tingkah laku marshaling lalai menghasilkan output di mana medan bersarang di dalam objek JSON dengan kekunci String dan Sah. Untuk mencapai output diratakan yang mengandungi hanya nilai NullString, ikuti langkah berikut:

1. Tentukan Jenis Tersuai:

Buat jenis tersuai yang membenamkan sql.NullString dan melaksanakan antara muka json.Marshaler.

type MyNullString struct {
    sql.NullString
}

2. Laksanakan Kaedah MarshalJSON:

Di dalam MyNullString, laksanakan kaedah MarshalJSON untuk menyediakan tingkah laku marshalling JSON tersuai.

func (s MyNullString) MarshalJSON() ([]byte, error) {
    if s.Valid {
        return json.Marshal(s.String)
    }
    return []byte(`null`), nil
}

3. Ubah suai Struct:

Gunakan jenis MyNullString tersuai untuk medan dalam struct yang memerlukan perataan.

type Company struct {
    ID   int          `json:"id"`              
    Abn  MyNullString `json:"abn,string"`
}

Contoh:

package main

import (
    "database/sql"
    "encoding/json"
    "log"
)

type MyNullString struct {
    sql.NullString
}

func (s MyNullString) MarshalJSON() ([]byte, error) {
    if s.Valid {
        return json.Marshal(s.String)
    }
    return []byte(`null`), nil
}

type Company struct {
    ID   int          `json:"id"`              
    Abn  MyNullString `json:"abn,string"`
}

func main() {
    company := Company{
        ID:   68,
        Abn:  MyNullString{String: "SomeABN", Valid: true},
    }

    result, err := json.Marshal(company)
    if err != nil {
        log.Fatal(err)
    }

    // Output: {"id":68,"abn":"SomeABN"}
    log.Println(string(result))
}

Dengan mengikuti langkah-langkah ini, anda boleh meratakan output sql.NullString dengan berkesan medan dan dapatkan hanya nilai dalam JSON marshall anda.

Atas ialah kandungan terperinci Bagaimana untuk Meratakan Output sql.NullString Marshalled 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