Go语言接口开发——不确定JSON数据结构的解析

Bryce · · 6308 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

在公司主要做接口的开发,会经常遇到接口对接的情况。有的时候,同一个请求返回的JSON数据格式并不一样。如果是正常,则可能只返回一个status字段,说明正常;如果中间出错,除了在status字段里面说明错误类型,还会通过error_message附带错误详细信息。比如要给用户加积分,如果加分失败,还会附带用户id等信息。那么,请求一个接口可能的返回值就是不确定的。

我最初就是定义两个结构体,我处理的数据都共有一个字段status,如果能够解析并且status表示操作成功,那么用封装成功内容的结构体解析;否则,用封装失败的结构体解析。这就是传说中的DIRTY HACK。。。

后来,偶然发现封装正确的结构体也会解析错误的字符串,当然,只会解析共有字段。那么,这个问题就好解决多了。把两个结构体放到一起即可,如果没有该字段,就不会被解析放入值。也就是说,未被解析的变量放的是默认值。

package main

import (
	"encoding/json"
	"fmt"
)

type Result struct {
	Status       int    `json:"status"`
	Message      string `json:"message"`
	ErrorCode    int    `json:"error_code"`
	ErrorMessage string `json:"error_message"`
}

func main() {
	json_str0 := `{"status":0,"message":"success"}`
	json_str1 := `{"status":1,"error_code":5,"error_message":"error"}`

	res0 := Result{}
	res1 := Result{}

	err0 := json.Unmarshal([]byte(json_str0), &res0)
	err1 := json.Unmarshal([]byte(json_str1), &res1)

	fmt.Println(res0, err0)
	fmt.Println(res1, err1)

}

这么简单的东西,Go语言的基本语法,但是看书的时候没有注意过,关键是做的时候没有认真分析,就直接DIRTY HACK了,我都不能忍自己了。。。

最后,还有一点,Go支持未知JSON数据结构的解析。创建一个interface,把它的地址传进去解析就行了,会解析出map[string]interface类型的数据。


参考文献
  • 【1】Go语言编程

原文链接:Go语言接口开发——不确定JSON数据结构的解析,转载请注明来源!


有疑问加站长微信联系(非本文作者)

本文来自:Cyeam

感谢作者:Bryce

查看原文:Go语言接口开发——不确定JSON数据结构的解析

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

6308 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传