Maison > développement back-end > Golang > golang json récursif à structurer ?

golang json récursif à structurer ?

WBOY
Libérer: 2024-02-05 23:27:07
avant
643 Les gens l'ont consulté

golang json récursif à structurer ?

Contenu de la question

J'ai déjà écrit Python, mais je viens juste de commencer à entrer en contact avec Golang

Prenons mon json comme exemple. L'enfant ne connaît pas le numéro. Il peut être trois ou dix.

[{
    "id": 1,
    "name": "aaa",
    "children": [{
        "id": 2,
        "name": "bbb",
        "children": [{
            "id": 3,
            "name": "ccc",
            "children": [{
                "id": 4,
                "name": "ddd",
                "children": []
            }]
        }]
    }]
}]
Copier après la connexion

J'écris la structure

type AutoGenerated []struct {
    ID       int    `json:"id"`
    Name     string `json:"name"`
    Children []struct {
        ID       int    `json:"id"`
        Name     string `json:"name"`
        Children []struct {
            ID       int    `json:"id"`
            Name     string `json:"name"`
            Children []struct {
                ID       int           `json:"id"`
                Name     string        `json:"name"`
                Children []interface{} `json:"children"`
            } `json:"children"`
        } `json:"children"`
    } `json:"children"`
}
Copier après la connexion

Mais je pense que c'est tellement stupide. Comment optimiser ?


Bonne réponse


Vous pouvez la réutiliser dans sa définition autogenerate Tapez :

type autogenerated []struct {
    id       int           `json:"id"`
    name     string        `json:"name"`
    children autogenerated `json:"children"`
}
Copier après la connexion

Testez-le :

var o autogenerated

if err := json.unmarshal([]byte(src), &o); err != nil {
    panic(err)
}

fmt.println(o)
Copier après la connexion

(src est votre chaîne d'entrée json.)

Sortie (essayez-le sur go terrain de jeu) :

[{1 aaa [{2 bbb [{3 ccc [{4 ddd []}]}]}]}]
Copier après la connexion

C'est plus facile à comprendre et à utiliser si autogenerate n'est pas une tranche en soi :

type autogenerated struct {
    id       int             `json:"id"`
    name     string          `json:"name"`
    children []autogenerated `json:"children"`
}
Copier après la connexion

Alors utilisez-le/testez-le :

var o []AutoGenerated

if err := json.Unmarshal([]byte(src), &o); err != nil {
    panic(err)
}

fmt.Println(o)
Copier après la connexion

Le résultat est le même. Essayez ceci sur le go terrain de jeu.

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:stackoverflow.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal