4

我正在尝试将 SQL 输出 (GORP) 转换为 JSON。我正在将gorp与 mySql 一起使用。

这是我选择的代码

type Mane struct {
    ManeId   string `db:"mane_id"`
    Manetana string `db:"manetana"`
    Yajamana string `db:"yajamana"`
}

var manegalu []Mane
_, err = dbmap.Select(&manegalu, "SELECT mane_id, manetana, yajamana FROM kd_mane")

//Option 1: Not working: Array of numbers. Not the actual json
a, err := json.Marshal(manegalu)
mt.Fprint(w, string(a))

//Option 2: Not working: Array of numbers. Not the actual json
for _, p := range manegalu {
    a, err := json.Marshal(p)
    fmt.Fprint(w, string(a))
}

我期待和输出这样

{"mane_id":3323, "manetana":"ABC", "yajamana":"hgy"},{"mane_id":2323, "manetana":"ADFC", "yajamana":"FDER"},{"mane_id":12343, "manetana":"GDSC", "yajamana":"hFDEy"} 

你能告诉我我做错了什么吗?我明白为什么选项 1 不起作用。但是根据https://gobyexample.com/json ,选项 2 对我来说似乎很好

4

2 回答 2

4

搞定了。

a, err := json.Marshal(manegalu) //get json byte array
n := len(a)   //Find the length of the byte array
s := string(a[:n]) //convert to string
fmt.Fprint(w, s) //write to response
于 2014-11-25T19:57:02.933 回答
2

json.Marshal()返回两个值,[]byteerror。您只在示例中分配第一个。请参阅http://golang.org/pkg/encoding/json/#Marshal

a, err := json.Marshal(manegalu)

编辑:您需要将字节数组转换为字符串才能与fmt.Fprint. 在您的情况下,w是一个io.Writer接口,因此您还可以使用:

w.Write(a)

在不导入fmt包的情况下打印结果。见http://golang.org/pkg/io/#Writer

于 2014-11-25T18:31:00.173 回答