我想问有关Go的问题encoding/json
,但我想它也适用于将JSON Blob映射到任何语言的对象的任何其他JSON库。
这是一个例子。如果您想使用goo.gl URL Shortener API来缩短URL ,则可以返回一个成功的响应:
{
"kind": "urlshortener#url",
"id": "http://goo.gl/fbsS",
"longUrl": "http://www.google.com/"
}
或错误响应:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "required",
"message": "Required",
"locationType": "parameter",
"location": "resource.longUrl"
}
],
"code": 400,
"message": "Required"
}
}
有没有一种惯用的方式来处理这个问题-可能会遵循两个完全不同的模式的响应?
通常,我使用地图/列表处理JSON;我知道Go中有可能。我可以解组到a map[string]interface{},然后检查地图是否已"error"作为关键。但是,我想我必须再次将其解码为适当的struct。(我错了吗?)
我正在做这样的事情。对于每种响应,我都有一种类型:
type successResponse struct {
Kind string
Id string
LongUrl string
}
type errorResponse struct {
Error struct {
Errors []struct {
Domain string
Reason string
Message string
LocationType string
Location string
}
Code int
Message string
}
}
解码看起来像这样:
s := new(successResponse)
err := json.Unmarshal(blob, s)
if err == nil {
// handle success
} else {
e := new(errorResponse)
err = json.Unmarshal(blob, e)
if err == nil {
// handle error response
} else {
// handle actual error
}
}
但这看起来很难看。我应该如何处理?
守候你守候我
胡说叔叔
慕田峪7331174
相关分类