尝试将嵌套的json响应从2个级别压缩到1。
以下是我在Go Playground上的工作代码:http://play.golang.org/p/kHAYuZUTko
我想最终:
type Social struct {
GooglePlusPlusOnes uint32 `Social:"GooglePlusOne"`
TwitterTweets uint32 `json:"Twitter"`
LinkedinShares uint32 `json:"LinkedIn"`
PinterestPins uint32 `json:"Pinterest"`
StumbleuponStumbles uint32 `json:"StumbleUpon"`
DeliciousBookmarks uint32 `json:"Delicious"`
FacebookLikes uint32 `json:"??some_magical_nested_address??"`
FacebookShares uint32 `json:"??some_magical_nested_address??"`
FacebookComments uint32 `json:"??some_magical_nested_address??"`
FacebookTotal uint32 `json:"??some_magical_nested_address??"`
}
...而不是包含嵌套Social
类型的Facebook
类型(见下面的代码)。
我怀疑我需要执行自定义UnmarshalJSON
功能,但我不知道这些是如何工作的,而且我是Go的新手。
建议?
以下是Go Playground link上面的代码:
package main
import (
"encoding/json"
"fmt"
)
type Social struct {
GooglePlusPlusOnes uint32 `json:"GooglePlusOne"`
TwitterTweets uint32 `json:"Twitter"`
LinkedinShares uint32 `json:"LinkedIn"`
PinterestPins uint32 `json:"Pinterest"`
StumbleuponStumbles uint32 `json:"StumbleUpon"`
DeliciousBookmarks uint32 `json:"Delicious"`
Facebook Facebook
}
type Facebook struct {
FacebookLikes uint32 `json:"like_count"`
FacebookShares uint32 `json:"share_count"`
FacebookComments uint32 `json:"comment_count"`
FacebookTotal uint32 `json:"total_count"`
}
func main() {
var jsonBlob = []byte(`[
{"StumbleUpon":0,"Reddit":0,"Facebook":{"commentsbox_count":4691,"click_count":0,"total_count":298686,"comment_count":38955,"like_count":82902,"share_count":176829},"Delicious":0,"GooglePlusOne":275234,"Buzz":0,"Twitter":7346788,"Diggs":0,"Pinterest":40982,"LinkedIn":0}
]`)
var social []Social
err := json.Unmarshal(jsonBlob, &social)
if err != nil {
fmt.Println("error:", err)
}
fmt.Printf("%+v", social)
}
答案 0 :(得分:3)
你可以简单地embed Facebook结构:
type Social struct {
.....
Facebook `json:"Facebook"`
}
然后访问它:
social.FacebookLikes
答案 1 :(得分:1)
如果您只使用地图,此功能将非常有用。
id