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

golang json récursif à structurer ?

WBOY
WBOYavant
2024-02-05 23:27:07556parcourir

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": []
            }]
        }]
    }]
}]

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"`
}

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"`
}

Testez-le :

var o autogenerated

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

fmt.println(o)

(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 []}]}]}]}]

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"`
}

Alors utilisez-le/testez-le :

var o []AutoGenerated

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

fmt.Println(o)

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer