Maison >développement back-end >Golang >Comment désorganiser JSON avec des noms de champs inconnus dans Go à l'aide d'une carte ?

Comment désorganiser JSON avec des noms de champs inconnus dans Go à l'aide d'une carte ?

DDD
DDDoriginal
2024-12-26 03:32:09280parcourir

How to Unmarshal JSON with Unknown Field Names in Go Using a Map?

Désassembler JSON avec des noms de champs inconnus à l'aide d'une carte

Désassembler JSON avec des noms de champs inconnus pose un défi, en particulier lorsque la structure de l'objet reste cohérente. Cette question explique comment gérer de tels scénarios et fournit une solution à l'aide d'une carte Golang.

Problème :

La réponse JSON fournie à partir d'une requête POST contient un champ avec un nom inconnu. Le but est de transformer ce JSON en une structure tout en préservant la structure cohérente des champs connus.

Solution :

Étape 1 : Créer une structure pour les champs connus

Définissez une structure nommée mData qui représente les champs cohérents dans le JSON :

type mData struct {
    KnownField1 [][5]int `json:"known_field_1"`
    KnownField2 [][5]int `json:"known_field_2"`
    KnownField3 [][5]int `json:"known_field_3"`
}

Étape 2 : Utiliser une carte pour gérer les noms de champs inconnus

Créez une carte appelée data pour stocker le nom de champ inconnu en tant que clé et instance de mData comme valeur :

var data map[string]mData

Étape 3 : Désassemblez le JSON dans le Map

Utilisez json.Unmarshal pour lier le corps JSON à la carte :

if err := json.Unmarshal(body, &data); err != nil {
    panic(err)
}

Étape 4 : Imprimer les résultats

La carte contiendra désormais le nom de champ inconnu et l'instance mData associée. Vous pouvez accéder aux valeurs à l'aide du code suivant :

for k, v := range data {
    fmt.Println(k, v)
}

Cette approche vous permet de désorganiser JSON avec des noms de champs inconnus tout en conservant la structure des champs connus. La sortie du code fourni sera :

unknown_field [[[1 2 3 4 5] [10 20 30 40 50] [100 200 300 400 500]] [[11 21 31 41 51]] [[12 22 32 42 52] [14 44 34 44 54]]]

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!

Déclaration:
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