通过response.body()返回的json报文,直接生成对应结构体,实现数据绑定
作者:非妃是公主
专栏:《Golang》
博客地址:https://blog.csdn.net/myf_666
个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩
![]()
文章目录
- 序
- 一、解决办法
- 二、相关测试代码
- 1. json body
- 2. 转换-展开
- 3. 转换-嵌套
序
在写Go进行api接口请求的时候,往往需要将返回的json报文与结构体进行绑定。如果api接口返回的json参数较多,而且嵌套关系较为复杂,自己书写结构体的定义代码,不仅费时费力,还有着出现错误的风向……
一、解决办法
可以通过oktools在线实现json body到结构体的转换,网址为:https://oktools.net/
进入后页面如下,选择JSON转Go Struct:
在转换时,两种展开和嵌套两种方式本质上其实是一样的,就像面向对象和面向过程的区别一样,都可以实现样的功能,可以根据自己的习惯进行选择,具体如下:
- 转换-展开:可以看到结构体中定义了结构体
- 转换-嵌套:只有一个大结构体,但大结构体中嵌套定义了小结构体。
这里给出相关代码的定义,读者可以自己测试进行验证。
二、相关测试代码
1. json body
{"rc":0,"wiki":{"known_in_laguages":63,"description":{"source":"tangible and intangible thing, except labor tied services, that satisfies human wants and provides utility","target":null},"id":"Q28877","item":{"source":"good","target":"\\u5546\\u54c1"},"image_url":"http:\\/\\/www.caiyunapp.com\\/imgs\\/link_default_img.png","is_subject":"true","sitelink":"https:\\/\\/www.caiyunapp.com\\/read_mode\\/?id=6354777915466339550246c5"},"dictionary":{"prons":{"en-us":"[g\\u028ad]","en":"[gud]"},"explanations":["a.\\u597d\\u7684;\\u5584\\u826f\\u7684;\\u5feb\\u4e50\\u7684;\\u771f\\u6b63\\u7684;\\u5bbd\\u5927\\u7684;\\u6709\\u76ca\\u7684;\\u8001\\u7ec3\\u7684;\\u5e78\\u798f\\u7684;\\u5fe0\\u5b9e\\u7684;\\u4f18\\u79c0\\u7684;\\u5b8c\\u6574\\u7684;\\u5f7b\\u5e95\\u7684;\\u4e30\\u5bcc\\u7684","n.\\u5229\\u76ca;\\u597d\\u5904;\\u5584\\u826f;\\u597d\\u4eba","ad.=well"],"synonym":["excellent","fine","nice","splendid","proper"],"antonym":["bad","wrong","evil","harmful","poor"],"wqx_example":[["to the good","\\u6709\\u5229,\\u6709\\u597d\\u5904"],["good, bad and indifferent","\\u597d\\u7684,\\u574f\\u7684\\u548c\\u4e00\\u822c\\u7684"],["good innings","\\u957f\\u5bff"],["good and ...","\\u5f88,\\u9887;\\u5b8c\\u5168,\\u5f7b\\u5e95"],["do somebody's heart good","\\u5bf9\\u67d0\\u4eba\\u7684\\u5fc3\\u810f\\u6709\\u76ca,\\u4f7f\\u67d0\\u4eba\\u611f\\u5230\\u6109\\u5feb"],["do somebody good","\\u5bf9\\u67d0\\u4eba\\u6709\\u76ca"],["be good for","\\u5bf9\\u2026\\u6709\\u6548,\\u9002\\u5408,\\u80dc\\u4efb"],["be good at","\\u5728\\u2026\\u65b9\\u9762(\\u5b66\\u5f97,\\u505a\\u5f97)\\u597d;\\u5584\\u4e8e"],["as good as one's word","\\u4fe1\\u5b88\\u8bfa\\u8a00,\\u503c\\u5f97\\u4fe1\\u8d56"],["as good as","\\u5b9e\\u9645\\u4e0a,\\u51e0\\u4e4e\\u7b49\\u4e8e"],["all well and good","\\u4e5f\\u597d,\\u8fd8\\u597d,\\u5f88\\u4e0d\\u9519"],["a good","\\u76f8\\u5f53,\\u8db3\\u8db3"],["He is good at figures . ","\\u4ed6\\u5584\\u4e8e\\u8ba1\\u7b97\\u3002"]],"entry":"good","type":"word","related":[],"source":"wenquxing"}}
转换得到的Go Struct如下:
2. 转换-展开
type AutoGenerated struct {Rc int `json:"rc"`Wiki Wiki `json:"wiki"`Dictionary Dictionary `json:"dictionary"`
}
type Description struct {Source string `json:"source"`Target interface{} `json:"target"`
}
type Item struct {Source string `json:"source"`Target string `json:"target"`
}
type Wiki struct {KnownInLaguages int `json:"known_in_laguages"`Description Description `json:"description"`ID string `json:"id"`Item Item `json:"item"`ImageURL string `json:"image_url"`IsSubject string `json:"is_subject"`Sitelink string `json:"sitelink"`
}
type Prons struct {EnUs string `json:"en-us"`En string `json:"en"`
}
type Dictionary struct {Prons Prons `json:"prons"`Explanations []string `json:"explanations"`Synonym []string `json:"synonym"`Antonym []string `json:"antonym"`WqxExample []WqxExample[]string `json:"wqx_example"`Entry string `json:"entry"`Type string `json:"type"`Related []interface{} `json:"related"`Source string `json:"source"`
}
3. 转换-嵌套
type AutoGenerated struct {Rc int `json:"rc"`Wiki struct {KnownInLaguages int `json:"known_in_laguages"`Description struct {Source string `json:"source"`Target interface{} `json:"target"`} `json:"description"`ID string `json:"id"`Item struct {Source string `json:"source"`Target string `json:"target"`} `json:"item"`ImageURL string `json:"image_url"`IsSubject string `json:"is_subject"`Sitelink string `json:"sitelink"`} `json:"wiki"`Dictionary struct {Prons struct {EnUs string `json:"en-us"`En string `json:"en"`} `json:"prons"`Explanations []string `json:"explanations"`Synonym []string `json:"synonym"`Antonym []string `json:"antonym"`WqxExample [][]string `json:"wqx_example"`Entry string `json:"entry"`Type string `json:"type"`Related []interface{} `json:"related"`Source string `json:"source"`} `json:"dictionary"`
}