2017-08-03 15 views
-1

我有这段代码。如何在JSON中显示一个结构体的映射键和值

package main 

import (
    "github.com/gin-gonic/gin" 
    _ "github.com/go-sql-driver/mysql" 
) 

func divisionsHandler(c *gin.Context) { 
    divisions := getDivisionRows() 
    json := make(map[int]string) 
    for divisions.Next() { 
     var d Division 
     err := divisions.Scan(&d.id, &d.name) 
     json[d.id] = d.name 
     if err != nil { 
      panic(err.Error()) 
     } 
    } 
    c.JSON(200, json) 
} 

结果是

{ 
    1: "games", 
    2: "technology", 
    3: "tekk", 
    4: "home entertainment", 
    5: "toys & stationery" 
} 

我想是JSON转换成类似

{ 
    [{ 
     "id": 1, 
     "name": "games" 
    }, 
    ... 
    ] 
} 

但如何?

+3

这不是有效的JSON 。一个对象不能只包含一个数组。没有开放和大括号的花括号更有意义。 – captncraig

回答

1

所以你想要一个json数组而不是一个json对象?

而不是加载一个map[int]string,为什么不简单地做一个[]Division

list := []Division{} 
for divisions.Next() { 
    var d Division 
    err := divisions.Scan(&d.id, &d.name) 
    list = append(list, d) 
    if err != nil { 
     panic(err.Error()) 
    } 
} 

你需要的字段名称更改为IDName使得JSON包可序列化它们,但你应该结束了财产以后更像是:

[ 
    {"ID":1,"Name":"Games}, 
    ... 
] 
+0

非常感谢!有用!! – sensorario