Maison >développement back-end >Golang >Comment convertir des données JSON en type de carte dans Golang

Comment convertir des données JSON en type de carte dans Golang

PHPz
PHPzoriginal
2023-04-21 14:20:375445parcourir

Dans Golang, puisque JSON est un format d'échange de données courant, la nécessité de convertir les données JSON en carte est également très courante. Dans cet article, nous présenterons comment convertir des données JSON en type de carte à l'aide de Golang.

  1. Utilisez la fonction unmarshal de la bibliothèque standard

La bibliothèque standard de Golang contient de nombreuses fonctions et types liés à JSON, dont le plus important est la fonction json.Unmarshal. Cette fonction décode les données JSON en structures de données en langage Go.

Nous pouvons utiliser cette fonction pour convertir une chaîne JSON en carte. Tout d’abord, définissez la variable utilisée pour stocker les résultats du décodage JSON et créez un tableau d’octets contenant la chaîne JSON. Ensuite, appelez la fonction json.Unmarshal pour décoder la chaîne JSON en un type de carte.

Voici un exemple :

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    var data = []byte(`{"name":"Tom","age":28,"gender":"male"}`)

    var result map[string]interface{}
    err := json.Unmarshal(data, &result)

    if err != nil {
        fmt.Println("JSON转换失败:", err)
        return
    }

    for key, value := range result {
        fmt.Printf("%s : %v\n", key, value)
    }
}

Dans le code ci-dessus, nous définissons un résultat variable de type map pour stocker le résultat du décodage JSON. Lorsque vous appelez json.Unmarshal pour décoder une chaîne JSON, vous devez transmettre l'adresse du résultat. Enfin, nous parcourons les paires clé-valeur du résultat et les imprimons. Le résultat est le suivant :

name : Tom
age : 28
gender : male
  1. Utilisation de la bibliothèque tierce easyjson

Il existe également une bibliothèque de sérialisation JSON tierce appelée easyjson dans Golang, qui peut plus facilement convertir JSON en type de données du langage Go. Contrairement à la bibliothèque standard json.Unmarshal, easyjson utilise la génération de code pour améliorer l'efficacité de l'analyse. De plus, il prend en charge des fonctionnalités plus avancées, telles que l'analyse de JSON en types en ligne ou l'itération à grande vitesse.

Pour utiliser easyjson, vous devez installer la bibliothèque et inclure le code qu'elle génère dans votre code Go. Tout d'abord, installez easyjson :

go get github.com/mailru/easyjson

Ensuite, définissez un modèle easyjson pour le type de données qui doit être converti en JSON. Le modèle easyjson se compose de plusieurs fichiers, chacun contenant un fichier .go et un fichier _easyjson.go.

Ce qui suit est un exemple de code qui utilise le modèle easyjson pour convertir une chaîne JSON en carte :

package main

import (
    "fmt"

    "github.com/mailru/easyjson/jlexer"
    "github.com/mailru/easyjson/jwriter"
)

type Person struct {
    Name   string `json:"name"`
    Age    int    `json:"age"`
    Gender string `json:"gender"`
}

func main() {
    data := []byte(`{"name":"Tom","age":28,"gender":"male"}`)

    var result map[string]interface{}
    r := jlexer.Lexer{Data: data}
    result = parseMap(&r)

    for key, value := range result {
        fmt.Printf("%s : %v\n", key, value)
    }
}

func parseMap(r *jlexer.Lexer) map[string]interface{} {
    result := map[string]interface{}{}
    for {
        key := r.String()
        r.WantColon()
        switch r.PeekToken() {
        case '{':
            r.Discard()
            result[key] = parseMap(r)
            if r.PeekToken() == '}' {
                r.Discard()
            }
        case '[':
            r.Discard()
            result[key] = parseArray(r)
            if r.PeekToken() == ']' {
                r.Discard()
            }
        case jlexer.Int:
            result[key] = r.Int()
        case jlexer.String:
            result[key] = r.String()
        case jlexer.Null:
            result[key] = nil
        case jlexer.True:
            result[key] = true
        case jlexer.False:
            result[key] = false
        default:
            panic("unrecognizable JSON format")
        }
        if r.PeekToken() == ',' {
            r.Discard()
        } else {
            break
        }
    }
    return result
}

func parseArray(r *jlexer.Lexer) []interface{} {
    result := []interface{}{}
    for {
        switch r.PeekToken() {
        case '{':
            r.Discard()
            result = append(result, parseMap(r))
            if r.PeekToken() == '}' {
                r.Discard()
            }
        case '[':
            r.Discard()
            result = append(result, parseArray(r))
            if r.PeekToken() == ']' {
                r.Discard()
            }
        case jlexer.Int:
            result = append(result, r.Int())
        case jlexer.String:
            result = append(result, r.String())
        case jlexer.Null:
            result = append(result, nil)
        case jlexer.True:
            result = append(result, true)
        case jlexer.False:
            result = append(result, false)
        default:
            panic("unrecognizable JSON format")
        }
        if r.PeekToken() == ',' {
            r.Discard()
        } else {
            break
        }
    }
    return result
}

Dans le code ci-dessus, nous définissons une structure nommée Person pour représenter les données dans la chaîne JSON. Nous créons ensuite une chaîne JSON dans un format facile à lire.

Dans la fonction principale, nous utilisons jlexer.Lexer pour transmettre les données JSON à la fonction parseMap et stocker le résultat dans le résultat de la variable de type map. Enfin, nous imprimons le contenu des paires clé-valeur dans la carte.

Dans cet exemple, nous avons écrit manuellement une fonction parseMap qui décode les chaînes JSON. Cette fonction lit le JSONLexer et s'appelle de manière récursive pour analyser la chaîne JSON. Enfin, il renvoie un objet cartographique des résultats analysés.

L'utilisation du décodeur fourni par easyjson peut facilement analyser des structures JSON complexes, mais lorsqu'une grande quantité de données doit être décodée dans une carte, l'efficacité de l'analyse peut être réduite.

Conclusion

Il existe plusieurs façons de convertir des données JSON en carte dans Golang. La bibliothèque standard fournit json.Unmarshal, qui peut directement décoder les données JSON dans une carte. La bibliothèque tierce easyjson fournit une solution plus efficace, mais nécessite plus d'installation et de configuration.

Choisissez la solution appropriée en fonction de la situation spécifique. Si vous avez seulement besoin de décoder une simple chaîne JSON, vous pouvez utiliser la bibliothèque standard ; si vous avez besoin de décoder une grande quantité de données ou une structure plus complexe, vous pouvez utiliser la bibliothèque tierce easyjson.

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