duanpi2033
2016-10-06 17:45 阅读 54

在Go / Golang中解组嵌套的JSON数组

Hi I have problem with unmarshalling nested JSON arrays. What struct should I create? I want to avoid using interface{} as much as possible, but I really don't know if it is possible in this case.

Json I want to unmarshall:

"[[[{\"aaa\": \"aaa\"}]]]"

and struct I want to use to unmarshall this:

type SomeStructNestedNested struct {
   Aaa string `json:"aaa"`
}
type SomeStructNested struct {
   SomeStructNestedNested []SomeStructNestedNested
}
type SomeStruct struct {
   SomeStructNested []SomeStructNested
}

Link to example: https://play.golang.org/p/owuMptNrix

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • 已采纳
    doukuang1897 doukuang1897 2016-10-07 00:24

    Yes the answer is just an slice of slices:

    type AutoGenerated [][][]struct {
         Aaa string `json:"aaa"`
    }
    

    Well thanks to your question I've discovered a bug in this tool I always use it for Json manipulation with Go, it can save you a lot of boring time, also it's better to use ticks `` to represent json strings like here

    点赞 评论 复制链接分享
  • doulianxing4015 doulianxing4015 2016-10-06 18:03

    The problem here is that you're attempting to use structs to represent the nesting when they're actually arrays. I find the form of the json itself to be quite poor but if you're stuck with it then you have to have a 3d array for the unmarshal, using just that 'nested nested' struct type. Below is link to your play example with some crude modifications to demonstrate the point.

    type SomeStructNestedNested struct {
        Aaa string `json:"aaa"`
    }
    
    jsonString := "[[[{\"aaa\": \"aaa\"}]]]"
    d := [][][]SomeStructNestedNested{}
    json.Unmarshal([]byte(jsonString), &d)
    fmt.Printf("%v", d)
    

    https://play.golang.org/p/88M0_UR_3_

    点赞 评论 复制链接分享

相关推荐