GoLang解析不一致JSON

brc7rcf0  于 2022-12-07  发布在  Go
关注(0)|答案(1)|浏览(163)

我目前正在编写一个查询第三方API的应用程序。以前我这样做的时候,我已经做了正确的方式,并创建了一个结构体,并将响应字符串解组到结构体中,并以这种方式访问所有的数据。然而,只有在数据结构一致的情况下,这种方式才有效。
我在尝试查询结构不一致的API时遇到了问题。

{'status': 'ok', 'due_date': '2023-01-01', 'library': 'AIEHA1'}

但如果失败,根据错误类型,我会得到不同的结构;一些例子:
第一次
显然,我可以把它传递到一个通用的Map,但我想知道什么是正确的做法是这样的东西?是的,API是可怕的,是的,可悲的是,我不得不使用它。

ncecgwcz

ncecgwcz1#

处理此问题的一种方法是使用包含所有可能字段的结构:

type apiResult struct {
   Status string
   DueDate string
   Error string
   ErrorDetails ErrorDetail
}

解组API响应,然后处理API结果结构以确定实际的返回类型。
另一种方法是解组到预期的结构体中,然后根据状态再次解组到错误结构体中:

json.Unmarshal(result,&data)
if data.Status=="error" {
    json.Unmarshal(result,&errorStruct)
} else if data.Status=="not-found" {
   ... etc.
}

当响应不是错误时,这样做的好处是只对目标结构解组一次。
通常当有错误时,API返回HTTP状态而不是2xx代码。如果是这种情况,您可以查看响应代码,并根据它进行解组。

相关问题