大家是怎么处理结构不固定的数据(JSON格式的)

dmwin72015 · 2023-02-16 15:59:49 · 2618 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2023-02-16 15:59:49 的主题,其中的信息可能已经有所发展或是发生改变。

场景一:

自己的接口, 格式可能为

{
    code:0,
    data: "任意格式",
    message:"success",
}

这种情况下,由于是自己的数据可控,弄一个通用的结构体, 通用的方法能解决

type Response struct {
    Code int
    Data any
    Message string
}
func JSONResponse(code int, data any, message string) Response {
    return Response {
        Code: code,
        Data: data,
        Message: message,
    }
}

JSONResponse(0, []int{1,2,3}, "")
JSONResponse(0, map[string]string{"name":"张三"}, "")

场景二:

如果要解析别人的接口, 由于data格式不固定,有什么比较便捷的方式,能解析data

目前想到的的方法一, 两次 Unmarshal:

type Response struct {
    Code int
    Data json.RawMessage
    Message string
}
// 假设一种数据格式
type DataType struct {
    ID string
    Name string
}

data := []byte{} // 假设是其他地方返回的数据
var msg = Response{}
json.Unmarshal(data, &Response)

var data2 = DataType{}
err = json.Unmarshal(msg.Data, &data2)

方法2: 使用 map[string]any 来解析数据,

type Response struct {
    Code    int
    Data    map[string]any
    Message string
}

这种就是直接用map来接收获取,就比较简单了,

不知道大家有没有其他更好的方式,求分享!!谢谢🙏


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

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

2618 次点击  ∙  1 赞  
加入收藏 微博
2 回复  |  直到 2023-02-20 15:52:29
saberlong
saberlong · #1 · 2年之前

gjson这个库

y1nhui
y1nhui · #2 · 2年之前

我一般都是直接用 map[string]interface{}

先拿到,然后做一次 unmarshal

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