在使用的端点以不同格式返回 JSON 的情况下,找到一种优雅的方法来处理这些变化至关重要。这种困境的出现是由于端点的不可变性质。
常见的策略包括使用多个结构进行解码,尝试解码为需要字符串的结构,并在遇到错误时切换到带有数组的备用结构。虽然此方法实现了所需的功能,但可能还有更精细的方法。
推荐的解决方案是将 JSON 解组为 interface{} 值。然后可以使用类型断言或类型开关检查该值以确定其实际类型。
Go 中的示例演示了此方法的有效性:
<code class="go">type Response struct { Message interface{} `json:"message"` } func main() { inputs := []string{ `{"message":"Message"}`, `{"message":["ERROR_CODE"]}`, } for _, input := range inputs { var r Response if err := json.Unmarshal([]byte(input), &r); err != nil { panic(err) } switch x := r.Message.(type) { case string: fmt.Println("Success, message:", x) case []interface{}: fmt.Println("Error, code:", x) default: fmt.Println("Something else:", x) } } }</code>
输出展示了成功的处理JSON 响应格式的区别:
Success, message: Message Error, code: [ERROR_CODE]
通过利用这种方法,您可以轻松处理不同的 JSON 格式,无需使用多个结构或错误处理。
以上是如何优雅地处理不同格式的 JSON 响应?的详细内容。更多信息请关注PHP中文网其他相关文章!