Maison >développement back-end >Golang >Comment désorganiser le JSON imbriqué dans un champ de chaîne dans Go ?

Comment désorganiser le JSON imbriqué dans un champ de chaîne dans Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-26 13:43:17184parcourir

How to Unmarshal Nested JSON within a String Field in Go?

Impossible de désérialiser la chaîne dans le champ Go Struct

Lors de la tentative de désérialisation d'une réponse de l'API Docker, l'erreur "json : impossible de désérialiser la chaîne dans Go champ de structure .v1Compatibility" se produit. La structure JSON définit un champ v1Compatibility sous forme de chaîne, mais la réponse réelle contient une chaîne JSON dans ce champ.

Pour résoudre ce problème, une approche de démarshaling en deux passes est requise :

  1. Définissez un nouveau champ, V1CompatibilityRaw, dans la structure Go pour capturer la valeur de la chaîne brute.
  2. Désorganisez la valeur brute Chaîne JSON dans une structure V1Compatibility distincte.

Voici la structure Go modifiée :

type ManifestResponse struct {
    Name         string `json:"name"`
    Tag          string `json:"tag"`
    Architecture string `json:"architecture"`

    FsLayers []struct {
        BlobSum string `json:"blobSum"`
    } `json:"fsLayers"`

    History []struct {
        V1CompatibilityRaw string `json:"v1Compatibility"`
        V1Compatibility V1Compatibility
    } `json:"history"`
}

type V1Compatibility struct {
    ID              string `json:"id"`
    Parent          string `json:"parent"`
    Created         string `json:"created"`
}

Après avoir décomposé la chaîne JSON brute, le champ V1Compatibility peut être mis à jour avec les données analysées :

for i := range jsonManResp.History {
    var comp V1Compatibility
    if err := json.Unmarshal([]byte(jsonManResp.History[i].V1CompatibilityRaw), &comp); err != nil {
        log.Fatal(err)
    }
    jsonManResp.History[i].V1Compatibility = comp
}

Cette approche en deux passes gère efficacement la situation où un champ de chaîne dans le JSON la réponse contient du contenu JSON imbriqué.

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