gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 03:33:01 27 4
gpt4 key购买 nike

无论出于何种原因,我在尝试使用 MySQL 存储在 Go 中构建一个简单的 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) )

最佳答案

result转化为*Volume的数组

result := []*Volume{}

然后追加新的 Volume 记录:

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

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

关于mysql - 正确删除 Go 中的第二个 json.Marshal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45195127/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com