Maison > développement back-end > Golang > le corps du texte

Comment désorganiser le JSON imbriqué avec des clés inconnues ?

Susan Sarandon
Libérer: 2024-11-18 12:29:02
original
639 Les gens l'ont consulté

How to Unmarshal Nested JSON with Unknown Keys?

Démêler le JSON imbriqué avec des clés inconnues

Démêler la complexité du JSON

Rencontrer des données JSON avec des clés inconnues et des structures d'imbrication complexes peut être une tâche ardue. Considérez le format JSON suivant :

{
  "message": {
    "Server1.example.com": [
      {
        "application": "Apache",
        "host": {
          "name": "/^Server-[13456]/"
        },
        "owner": "User1",
        "project": "Web",
        "subowner": "User2"
      }
    ],
    "Server2.example.com": [
      {
        "application": "Mysql",
        "host": {
          "name": "/^Server[23456]/"
        },
        "owner": "User2",
        "project": "DB",
        "subowner": "User3"
      }
    ]
  },
  "response_ms": 659,
  "success": true
}
Copier après la connexion

Comme illustré dans cet exemple, les noms de serveur (Server[0-9].example.com) ne sont pas prédéterminés et peuvent varier. De plus, le champ suivant les noms de serveur n'a pas de clé explicite.

Structuration de la solution

Pour capturer efficacement ces données, nous pouvons utiliser une structure map[string]ServerStruct :

type YourStruct struct {
    Success bool
    ResponseMS int
    Servers map[string]*ServerStruct
}

type ServerStruct struct {
    Application string
    Owner string
    [...]
}
Copier après la connexion

En incorporant ces structures, nous permettons l'attribution de noms de serveurs inconnus dans la carte.

Dévoilement des secrets JSON

Pour exceller davantage dans la désorganisation du JSON, pensez à ajouter les balises JSON nécessaires :

import "encoding/json"

// YourStruct contains the JSON structure with success, response time, and a map of servers
type YourStruct struct {
    Success    bool
    ResponseMS int `json:"response_ms"`
    Servers    map[string]*ServerStruct `json:"message"`
}

// ServerStruct holds server information, including application, owner, etc.
type ServerStruct struct {
    Application string `json:"application"`
    Owner       string `json:"owner"`
    [...]
}

// UnmarshalJSON is a custom unmarshaller that handles nesting and unknown keys
func (s *YourStruct) UnmarshalJSON(data []byte) error {
    type YourStructHelper struct {
        Success    bool
        ResponseMS int               `json:"response_ms"`
        Servers    map[string]ServerStruct `json:"message"`
    }
    var helper YourStructHelper
    if err := json.Unmarshal(data, &helper); err != nil {
        return err
    }
    s.Success = helper.Success
    s.ResponseMS = helper.ResponseMS
    s.Servers = make(map[string]*ServerStruct)
    for k, v := range helper.Servers {
        s.Servers[k] = &v // Explicitly allocate memory for each server
    }
    return nil
}
Copier après la connexion

Grâce à ces ajustements, vous pouvez efficacement désorganiser le JSON fourni dans votre structure personnalisée, ouvrant ainsi la voie à une manipulation de données sans effort.

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