正确的json unmarshal结构

时间:2017-03-04 22:58:37

标签: arrays json object go

我无法弄清楚如何在golang中为这个json对象构建一个结构:

{
    "response": [1702487, {
            "uid": 150261846,
            "first_name": "Олег",
            "last_name": "Брейн"
        }, {
            "uid": 53260546,
            "first_name": "Олег",
            "last_name": "Лобацевич"
        }
    ]
}

正如您所看到的,数组和计数都没有键名。

如果你能提供帮助,我们会很高兴

3 个答案:

答案 0 :(得分:0)

在这种情况下,你必须在某处使用interface {},例如:

    package main

    import (
            "fmt"
            "encoding/json"
    )

    type JsObject struct {
            Response []interface{}
    }

    func main() {
            bs := []byte(`{"response":[1702487,{"uid":150261846,"first_name":"Олег","last_name":"Брейн"},{"uid":53260546,"first_name":"Олег","last_name":"Лобацевич"}]}`)
            var jso JsObject
            json.Unmarshal(bs, &jso)
            fmt.Printf("%+v\n", jso)
    }

答案 1 :(得分:0)

Json去做这件事非常方便:

https://mholt.github.io/json-to-go/

如果你可以删除伪造的1702487,这使得它成为一个异类列表,你应该能够轻松地将它解析成一个合适的结构,否则你可能会被使用界面困住:

https://play.golang.org/p/w7ebLTuOj9

据推测,你想要一组像这样的结构:

type Person struct {
  UID       int `json:"uid"`
  FirstName string `json:"first_name"`
  LastName  string `json:"last_name"`
}

不确定1702487是什么,但如果是请求的uid,它并不真正属于数组。

答案 2 :(得分:0)

type AutoGenerated struct {
    Response []interface{} `json:"response"`
}