package main import ( "encoding/json" "fmt" ) type PublicKey struct { name string price string } type KeysResponse struct { Collection []PublicKey } func main() { s := `[{"name":"Galaxy Nexus","price":"3460.00"},{"name":"Galaxy Nexus","price":"3460.00"}]` keys := make([]PublicKey,0) err := json.Unmarshal([]byte(s),&keys) if err == nil { fmt.Printf("%+v\n",keys) } else { fmt.Println(err) fmt.Printf("%+v\n",keys) } }
OutPut:[{name:price:}]
我有api调用返回结果它就像对象数组(json数组)复杂格式.我需要通过golang解析结果我该如何实现?以下数据是我的结果,它来自api调用.
[{"id":694476444991229955,"id_str":"694476444991229955","text":"Got it","sender":{"id":1690262984,"id_str":"1690262984","name":"Ashok Kumar T","screen_name":"Ashok_kumar_T","location":"Trivandrum","description":"","url":null,"entities":{"description":{"urls":[]}},"protected":false,"followers_count":68,"friends_count":32,"listed_count":0,"created_at":"Thu Aug 22 06:52:53 +0000 2013","favourites_count":5,"utc_offset":19800,"time_zone":"Chennai","geo_enabled":true,"verified":false,"statuses_count":124,"lang":"en","contributors_enabled":false,"is_translator":false,"is_translation_enabled":false,"profile_background_color":"131516","profile_background_image_url":"http:\/\/abs.twimg.com\/images\/themes\/theme14\/bg.gif","profile_background_image_url_https":"https:\/\/abs.twimg.com\/images\/themes\/theme14\/bg.gif","profile_background_tile":true,"profile_image_url":"http:\/\/pbs.twimg.com\/profile_images\/378800000337984382\/5eded5a0c6fda4a85511aff15e5befd9_normal.jpeg","profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/378800000337984382\/5eded5a0c6fda4a85511aff15e5befd9_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/1690262984\/1429709252","profile_link_color":"009999","profile_sidebar_border_color":"EEEEEE","profile_sidebar_fill_color":"EFEFEF","profile_text_color":"333333","profile_use_background_image":true,"has_extended_profile":false,"default_profile":false,"default_profile_image":false,"following":true,"follow_request_sent":false,"notifications":false},"sender_id":1690262984,"sender_id_str":"1690262984","sender_screen_name":"Ashok_kumar_T","recipient":{"id":4848598394,"id_str":"4848598394","name":"Prabhu","screen_name":"prabhu_cfml","location":"","followers_count":1,"friends_count":1,"created_at":"Tue Feb 02 09:25:17 +0000 2016","favourites_count":0,"utc_offset":null,"time_zone":null,"geo_enabled":false,"statuses_count":0,"lang":"en-gb","profile_background_color":"F5F8FA","profile_background_image_url":null,"profile_background_image_url_https":null,"profile_background_tile":false,"profile_image_url":"http:\/\/abs.twimg.com\/sticky\/default_profile_images\/default_profile_3_normal.png","profile_image_url_https":"https:\/\/abs.twimg.com\/sticky\/default_profile_images\/default_profile_3_normal.png","profile_link_color":"2B7BB9","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","default_profile":true,"default_profile_image":true,"following":false,"recipient_id":4848598394,"recipient_id_str":"4848598394","recipient_screen_name":"prabhu_cfml","created_at":"Tue Feb 02 11:04:21 +0000 2016","entities":{"hashtags":[],"symbols":[],"user_mentions":[],"urls":[]}},{"id":694476425793916931,"id_str":"694476425793916931","text":"Hi","created_at":"Tue Feb 02 11:04:17 +0000 2016","urls":[]}}]
您只错过了一点:您需要导出结构的字段:
type PublicKey struct { Name string Price string }
它会工作(在Go Playground上尝试):
[{Name:Galaxy Nexus Price:3460.00} {Name:Galaxy Nexus Price:3460.00}]
请注意,JSON文本包含具有小写文本的字段名称,但json包“足够聪明”以匹配它们.如果它们完全不同,你可以使用struct标签告诉json包在JSON文本中如何找到它们(或它们应该如何编组),例如:
type PublicKey struct { Name string `json:"some_name"` Price string `json:"JsonPrice"` }
要解析其他JSON文本,请创建一个对JSON数据建模的Go结构.我建议格式化JSON以查看真实结构,例如你可以使用这个online JSON formatter/validator.然后你可以解组成这个结构的一部分.
或者简单地解组成一片地图,例如[] map [string] interface {},但是你需要索引地图以获得不同的值,你还需要使用类型断言来获取“类型”值.