2017-03-04 90 views
0

我无法弄清楚如何建立一个结构在golang此JSON对象:正确的结构JSON解组

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

正如你可以看到有没有键名数组和计数了。

会很高兴,如果你能帮助

+0

从哪里可以期待这种回应?什么是'1702487'? – OmarIlias

回答

0

在这种情况下,你必须踢和使用的界面{}的地方,例如:

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) 
    } 
0

的Json去是这种很方便事情:

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

如果你能删除虚假1702487这使它成为一个异质的列表,你应该能够解析它的EAS随手成结构合理,否则你可能被卡住使用界面:

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它并不属于数组。

+0

1702487是您在该对象中名字与您相同的人的总人数 –

+0

您的结构非常好,但响应仍然有名为“响应”的键,所以结构看起来会不同。有什么方法可以删除或跳过密钥?就像直接跳入人物对象,忽略“响应”和计数 –

+0

我会清理数组中的int键的数据(您可以离开振荡键)然后使用它。另一种方法是用map [string] interface {}手动解析,据我所见。如果你控制数据,我会改变它来解析,而不是你坚持清理它。 –

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

请解释如何解决这个问题。 –