Rumah >pembangunan bahagian belakang >Golang >golang rekursif json ke struct?

golang rekursif json ke struct?

WBOY
WBOYke hadapan
2024-02-05 23:27:07638semak imbas

golang rekursif json ke struct?

Isi soalan

Saya pernah menulis ular sawa sebelum ini, tetapi saya baru mula berhubung dengan golang

Ambil json saya sebagai contoh Kanak-kanak itu tidak tahu nombornya.

[{
    "id": 1,
    "name": "aaa",
    "children": [{
        "id": 2,
        "name": "bbb",
        "children": [{
            "id": 3,
            "name": "ccc",
            "children": [{
                "id": 4,
                "name": "ddd",
                "children": []
            }]
        }]
    }]
}]

Saya menulis struktur

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

Tetapi saya rasa ini sangat bodoh. Bagaimana untuk mengoptimumkan?


Jawapan betul


Anda boleh menggunakannya semula dalam definisinya autogenerate Jenis:

type autogenerated []struct {
    id       int           `json:"id"`
    name     string        `json:"name"`
    children autogenerated `json:"children"`
}

Uji:

var o autogenerated

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

fmt.println(o)

(src ialah rentetan input json anda.)

Output (cuba di pergi taman permainan):

[{1 aaa [{2 bbb [{3 ccc [{4 ddd []}]}]}]}]

Lebih mudah difahami dan digunakan jika autogenerate bukan kepingan itu sendiri:

type autogenerated struct {
    id       int             `json:"id"`
    name     string          `json:"name"`
    children []autogenerated `json:"children"`
}

Kemudian gunakannya/ujinya:

var o []AutoGenerated

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

fmt.Println(o)

Keluaran adalah sama. Cuba ini di pergi taman permainan.

Atas ialah kandungan terperinci golang rekursif json ke struct?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam