Maison > développement back-end > Golang > Comment sérialiser et désérialiser des tableaux JSON hétérogènes dans Go ?

Comment sérialiser et désérialiser des tableaux JSON hétérogènes dans Go ?

Patricia Arquette
Libérer: 2024-12-11 14:57:10
original
461 Les gens l'ont consulté

How to Serialize and Deserialize Heterogeneous JSON Arrays in Go?

Sérialisation de tableaux JSON hétérogènes dans Go

Dans Go, sérialisation de tableaux JSON hétérogènes (contenant un mélange de chaînes, de chiffres et de caractères Unicode) pose un défi en raison de l'interdiction du langage sur les tranches de type mixte. Considérez la structure JSON souhaitée suivante :

{
    results: [
        ["ooid1", 2.0, "Söme text"],
        ["ooid2", 1.3, "Åther text"],
    ]
}
Copier après la connexion

Sérialisation avec une interface Marshaler

Pour personnaliser la sérialisation, nous pouvons implémenter l'interface json.Marshaler pour notre type de ligne. Nous utiliserons une tranche intermédiaire d'interface{} pour encoder les valeurs hétérogènes :

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)
}
Copier après la connexion

Dans cet exemple, la méthode MarshalJSON convertit la ligne en un tableau de types mixtes.

Désérialisation avec une interface Unmarshaler

Nous pouvons de la même manière implémenter l'interface json.Unmarshaler pour déstructurer les valeurs hétérogènes :

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
}
Copier après la connexion

Cette méthode reconvertit les octets JSON dans notre structure Row.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal