跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • json.Marshal 如何去除 interface{}外层的”[]”
未分類
7 2 月 2021

json.Marshal 如何去除 interface{}外层的”[]”

json.Marshal 如何去除 interface{}外层的”[]”

資深大佬 : jowan 3

数据结构 1

type User struct {  Name string `json:"name"`  Age  int    `json:"age"` }  user1 := User{  Name: "zhangsan",  Age:  18, }  user2 := User{  Name: "lisi",  Age:  20, }  arr1 := []User{user1, user2} 

数据结构 2

arr2 := []int{1, 2, 3, 4, 5} 

封装返回

type JsonResponse struct {  Code int           `json:"code"`   Data interface{}   `json:"data,omitempty"` }  str, _ := json.Marshal(JsonResponse{  Code:    code,  Message: message,  Data:    data, })  

数据结构 1 期待返回的结果是

{  "code": 0,  "data": [1, 2, 3, 4, 5] } 

实际返回的是

{  "code": 0,  "data": [[1, 2, 3, 4, 5]] } 

数据结构 2 期待返回的结果是

{  "code": 0,  "data": [   {"name": "zhangsan", "age": 18},   {"name": "lisi", "age": 20}  ] } 

实际返回的结果是

{  "code": 0,  "data": [     [       {         "name": "zhangsan",         "age": 18       },       {         "name": "lisi",         "age": 20       }     ]   ] } 

data 外面都会套一层[]
但是 data 数据类型又不是固定的 所以用到了 interface{}

刚接触 go 对 json 处理不太熟悉 还请各位大佬指导

大佬有話說 (6)

  • 資深大佬 : jaynos

    代码不全,应该是自己代码的问题,可以看以下例子。
    “`go
    package main

    import (
    “encoding/json”
    “fmt”
    )

    type JsonResponse struct {
    Code int `json:”code”`
    Data interface{} `json:”data,omitempty”`
    }

    func main() {
    data := []int{1, 2, 3, 4, 5}
    bs, _ := json.Marshal(JsonResponse{
    Code: 0,
    Data: data,
    })
    // {“code”:0,”data”:[1,2,3,4,5]}
    fmt.Printf(“%s”, bs)
    }
    “`

    话说直接断点调试下不就知道数据对不对了

  • 資深大佬 : daimazha

    写个完整点的代码可以吗? 你现在的代码应该跟你预期的是一样的

  • 主 資深大佬 : jowan

    谢谢 测试 你这样确实没问题
    但是我这边 还有一个方法 调用 FormatJson() 这样就会多一层[]

    “`
    func FormatJson(code int, data interface{}) {
    str, _ : = json.Marshal(JsonResponse{
    Code: code,
    Data: data,
    })
    }
    “`

  • 主 資深大佬 : jowan

    @daimazha 是的 如果多套一层方法就会多一层[]

  • 資深大佬 : march1993

    data 定义呢

  • 資深大佬 : xgfan

    写个最小复现的 demo 吧。压根不存在你问的问题。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具