首页  >  文章  >  后端开发  >  如何优雅地处理不同格式的 JSON 响应?

如何优雅地处理不同格式的 JSON 响应?

Barbara Streisand
Barbara Streisand原创
2024-10-27 10:42:03627浏览

How to Elegantly Handle JSON Responses with Varying Formats?

探索处理不同格式的 JSON 响应的方法

在使用的端点以不同格式返回 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn