JSON结构如下所示:
[
{
"sha": "eb08dc1940e073a5c40d8b53a5fd58760fde8f27",
"node_id": "C_kwDOHb9FrtoAKGViMDhkYzE5NDBlMDczYTVjNDBkOGI1M2E1ZmQ1ODc2MGZkZThmMjc",
"commit": {
"author": {
"name": "xxxx"
},
"committer": {
"name": "xxxxx"
},
"message": "update DownLoad_Stitch_ACM.py",
"tree": {
"sha": "a30aab98319846f0e86da4a39ec05786e04c0a4f",
"url": "xxxxx"
},
"url": "xxxxx",
"comment_count": 0,
"verification": {
"verified": false,
"reason": "unsigned",
"signature": null,
"payload": null
}
},
"url": "xxxxx",
"html_url": "xxxxx",
"comments_url": "xxxxx",
"author": {
"login": "xxxxx",
"id": "xxxxx",
"node_id": "U_kgDOBkuicQ",
"avatar_url": "https://avatars.githubusercontent.com/u/105620081?v=4",
"gravatar_id": "",
"type": "User",
"site_admin": false
},
"committer": {
"login": "xxxxx",
"id": "xxxxx"
},
"parents": [
{
"sha": "cf867ec9dc4b904c466d9ad4b9338616d1213a06",
"url": "xxxxx",
"html_url": "xxxxx"
}
]
}
]
我不知道如何获取位置0的数据。
content, _ := simplejson.NewJson(body)
arr, _ := content.Array() // Here can get the all data, It's []interface{} type.
arr[0]["sha"]
取不到下一个数据,怎么处理?
3条答案
按热度按时间elcex8rz1#
编译器在编译时并不清楚
arr
是map[string]interface{}
的数组,因为arr[0]
是interface{}
类型,这基本上意味着编译器对这种类型一无所知,这就是为什么不能在这里进行Map查找操作。您可以添加一个类型Assert,以确保可以将其用作Map,如下所示:
要获得字符串形式的SHA,还可以在其后面添加一个类型Assert:
这个例子也显示了这一点,缺点是如果给定的数据不是指定的类型,程序就会崩溃,你可以使用类型Assert来检查它是否有效(
asString, ok := ...
),但是对于更复杂的数据,它会变得很麻烦。这样做是可行的,但不是很好,我建议使用tool like this来生成Go语言的结构体,然后以类型安全的方式使用它们,首先定义一个结构体,包含你需要的所有信息:
然后,您可以使用标准库
json
包来解组您的数据:这里有一个例子--这是一种更像Go语言的JSON数据转换方法。
jgovgodb2#
您的json数据格式不对,首先删除
"id": "xxxxx",
行后的,
:您应该在
NewJson
之后检查错误,以防止发现是否存在问题:要从第一个索引中获取
sha
,可以简单地使用simplejson内置方法:mwkjh3gx3#
以下是您可以获得所需值的方法。
这对我很有效。