Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mensiri dan Menyahsiri Tatasusunan JSON Heterogen dalam Go?

Bagaimana untuk Mensiri dan Menyahsiri Tatasusunan JSON Heterogen dalam Go?

Patricia Arquette
Patricia Arquetteasal
2024-12-11 14:57:10461semak imbas

How to Serialize and Deserialize Heterogeneous JSON Arrays in Go?

Mensiri Tatasusunan JSON Heterogen dalam Go

Dalam Go, mensiri tatasusunan JSON heterogen (mengandungi gabungan rentetan, nombor dan aksara unikod) menimbulkan cabaran kerana larangan bahasa pada kepingan jenis campuran. Pertimbangkan struktur JSON yang diingini berikut:

{
    results: [
        ["ooid1", 2.0, "Söme text"],
        ["ooid2", 1.3, "Åther text"],
    ]
}

Pensirian dengan Antara Muka Marshaler

Untuk menyesuaikan penyiaran, kami boleh melaksanakan antara muka json.Marshaler untuk jenis Row kami. Kami akan menggunakan kepingan perantaraan antara muka{} untuk mengekod nilai heterogen:

package main

import (
    "encoding/json"
    "fmt"
)

type Row struct {
    Ooid  string
    Score float64
    Text  string
}

func (r *Row) MarshalJSON() ([]byte, error) {
    arr := []interface{}{r.Ooid, r.Score, r.Text}
    return json.Marshal(arr)
}

Dalam contoh ini, kaedah MarshalJSON menukarkan Row kepada tatasusunan jenis campuran.

Deserialisasi dengan Antara Muka Unmarshaler

Kami juga boleh melaksanakan Antara muka json.Unmarshaler untuk memusnahkan nilai heterogen:

func (r *Row) UnmarshalJSON(bs []byte) error {
    arr := []interface{}{}
    json.Unmarshal(bs, &arr)
    r.Ooid = arr[0].(string)
    r.Score = arr[1].(float64)
    r.Text = arr[2].(string)
    return nil
}

Kaedah ini menukarkan bait JSON kembali ke dalam struktur Baris kami.

Atas ialah kandungan terperinci Bagaimana untuk Mensiri dan Menyahsiri Tatasusunan JSON Heterogen 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