正确删除Go中的第二个json.Marshal

时间:2017-07-19 15:35:08

标签: mysql json rest go

无论出于何种原因,我试图在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) )

1 个答案:

答案 0 :(得分:2)

result变为*Volume

数组
result := []*Volume{}

然后附加新的Volume条记录:

result = append(result, &Volume{Id: id,Name:name,Description: description})

最后使用Marshal(result)来获取JSON结果。