无论出于何种原因,我试图在Go with MySQL存储中构建一个简单的Rest API,添加了第二个json.Marshal,它是双重编码并使用转义引号生成结果等等。我可以删除引号,但我认为我不应该有两个json.Marshal事情发生在第一位。
问题是双重的 - 1)哪个是适当的删除(倾向于第一个,因为“结果”应该是更大的数组)和2)如何在删除后保持代码功能?当我开始遇到各种各样的错误时,我不能简单地删除第一个。以下是代码的相关部分:
type Volume struct {
Id int
Name string
Description string
}
......跳过......
var result = make([]string,1000)
switch request.Method {
case "GET":
name := request.URL.Query().Get("name")
stmt, err := db.Prepare("select id, name, description from idm_assets.VOLUMES where name = ?")
if err != nil{
fmt.Print( err );
}
rows, err := stmt.Query(name)
if err != nil {
fmt.Print( err )
}
i := 0
for rows.Next() {
var name string
var id int
var description string
err = rows.Scan( &id, &name, &description )
if err != nil {
fmt.Println("Error scanning: " + err.Error())
return
}
volume := &Volume{Id: id,Name:name,Description: description}
这是第一个json.Marshal ......
b, err := json.Marshal(volume)
fmt.Println(b)
if err != nil {
fmt.Println(err)
return
}
result[i] = fmt.Sprintf("%s", string(b))
i++
}
result = result[:i]
...跳过PUT,DELETE等的其他案例到第二个json.Marshal ......
default:
}
json, err := json.Marshal(result)
if err != nil {
fmt.Println(err)
return
}
fmt.Fprintf(response,"'%v'\n",string(json) )
答案 0 :(得分:2)
将result
变为*Volume
result := []*Volume{}
然后附加新的Volume
条记录:
result = append(result, &Volume{Id: id,Name:name,Description: description})
最后使用Marshal(result)
来获取JSON结果。