嵌套JSON

时间:2018-04-01 07:47:05

标签: json go

我在golang中解析JSON时出现问题,我从JSON格式接收来自API的响应,它在多个级别中嵌套相同形式的JSON。

API的响应如下

{
    "podKategoria": {
        "podKategoriaTyp": "area",
        "nazwaWyswietlana": "Area",
        "podKategorie": [
            {
                "podKategoriaTyp": "somethingelse",
                "nazwaWyswietlana": "Display something else",
                "podKategoria": {
                    "podKategoriaTyp": "and other thing",
                    "nazwaWyswietlana": "Display and other thing",
                    "podKategorie": [
                        {
                            "podKategoriaTyp": "sub nd other thing",
                            "nazwaWyswietlana": "display nd other thing"
                        },
                        {
                            "podKategoriaTyp": "sub 2 nd other thing",
                            "nazwaWyswietlana": "display sub 2 nd other thing"
                        },
                        {
                            "podKategoriaTyp": "sub 3 nd other thing",
                            "nazwaWyswietlana": "display sub 3 nd other thing"
                        }
                    ]
                }
            },
            {
                "podKategoriaTyp": "another one",
                "nazwaWyswietlana": "display another one",
                "podKategoria": {
                    "podKategoriaTyp": "and and another one ",
                    "nazwaWyswietlana": "display it another one",
                    "podKategorie": [
                        {
                            "podKategoriaTyp": "sub 1 another one",
                            "nazwaWyswietlana": "display sub 1"
                        },
                        {
                            "podKategoriaTyp": "sub 2 another one",
                            "nazwaWyswietlana": "display sub 2"
                        },
                    ]
                }
            },
        ]
    }
}

在此之后我使用https://mholt.github.io/json-to-go/尝试为我创建结构。最合适的方法似乎是创建基本结构,如

type Struktury struct {
    PodKategorie PodKategoria `json:"podKategoria"`
}


type PodKategoria struct {
    PodKategoriaTyp string `json:"podKategoriaTyp"`
    NazwaWyswietlana     string `json:"nazwaWyswietlana"`
    PodKategorie   []struct {
        SubCategoryType string `json:"podKategoriaTyp"`
        DisplayName     string `json:"nazwaWyswietlana"`
    } `json:"podKategorie, omitempty"`
}

但是你可以看到JSON结构有点棘手,而且我有点想要找到正确的解决这个JSON字符串的最佳方法:/

初次尝试使用默认值允许我获取项目的根(在操场https://play.golang.org/p/uQMnMGEtXD-中测试)因此这让我想到可能是自定义unmarshall接口实现的方法吗?任何指针如何解决这个问题将不胜感激

1 个答案:

答案 0 :(得分:2)

这是一个有效的解决方案,请检查playground

type Categories []*Category
type Category struct {
    Type string `json:"podKategoriaTyp"`
    Display string `json:"nazwaWyswietlana"`
    Categories Categories `json:"podKategorie"`
    SubCategory *Category `json:"podKategoria"`
}

func main() {

    cat := &Category{}
    err := json.Unmarshal([]byte(JSON), &cat)
    if err != nil {
        log.Fatal(err)
    }
    buf, err := json.Marshal(cat)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("%s\n", buf)
}