Désorganisation du JSON imbriqué sans structure connue
Lorsque vous rencontrez des données JSON imbriquées sans structures définies, il existe plusieurs approches pour atténuer les difficultés liées à la désorganisation.
Éviter les démarshals répétés
Il est généralement conseillé de minimiser les opérations de démarshaling. Envisagez de mettre en œuvre un mécanisme de mise en cache pour stocker les objets non organisés pour une utilisation future et éviter les opérations répétitives. Cependant, dans certains cas, plusieurs désorganisations peuvent être nécessaires, en particulier lorsqu'il s'agit de structures imbriquées de différents types.
Détermination de la structure correcte pour la désorganisation
Méthode 1 : Désassembler pour map[string]interface{}
Désassembler le json.RawMessage dans une map[string]interface{}. Cela permet d'examiner la structure imbriquée pour identifier le type et, par la suite, la structure correcte dans laquelle se désorganiser.
Exemple :
<code class="go">var objMap map[string]interface{} json.Unmarshal(rawMessage, &objMap)</code>
Méthode 2 : Regular Expression Match
Utilisez une expression régulière pour faire correspondre la chaîne de type dans les données JSON. Une fois le type connu, utilisez la réflexion ou un commutateur de type pour annuler le regroupement dans la structure correspondante.
Exemple :
<code class="go">type Regex *regexp.Regexp // Split the JSON data into key-value pairs type KeyValue struct { Key string Value string } // Regex for extracting the type var typeRE = Regex(regexp.MustCompile(`(?m)^.*"type": "(.+)".*$`)) // Unmarshal the raw message and extract the type func getType(rawMessage []byte) (string, error) { var data KeyValue err := json.Unmarshal(rawMessage, &data) if err != nil { return "", err } matches := typeRE.FindStringSubmatch(data.Value) return matches[1], nil }</code>
Utilisation de la copie ou de la version régulière Approche d'expression
Méthode A : Copier et annuler le marshal
Méthode B : expression régulière et démarshal
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!