使用时格式化出现问题 sqlx
rows, err = db.Queryx(query)
for rows.Next() {
results := make(map[string]interface{})
err = rows.MapScan(results)
fmt.Fprintf(w,"%#v \n", results)
}
使用%#v时的输出
fmt.Fprintf(w,"%#v \n", results)
map [string] interface {} {“ USER_ID”:“ JD”,“ USER_NAME”:“ John Doe”}
map [string] interface {} {“ USER_ID”:“ JAD”,“ USER_NAME”:“ Jane Doe”}
map [string] interface {} {“ USER_ID”:“ DD”,“ USER_NAME”:“ Donald Duck”}
仅使用%v
fmt.Fprintf(w,"%v \n", results)
地图[USER_ID:JD USER_NAME:John Doe]
地图[USER_ID:JAD USER_NAME:Jane Doe]
地图[USER_ID:DD USER_NAME:唐老鸭]
所需的输出是摆脱map [string] interface {}
{“ USER_ID”:“ JD”,“ USER_NAME”:“ John Doe”}
{“ USER_ID”:“ JAD”,“ USER_NAME”:“ Jane Doe”}
{“ USER_ID”:“ DD”,“ USER_NAME”:“ Donald Duck”}
这可能吗?
使用JSON编辑
根据@Timothy Jones的说法,我已经更新了主要代码,并且可以按预期工作。除了将结果打印到终端而不是浏览器上。
rows, err = db.Queryx(query)
for rows.Next() {
results := make(map[string]interface{})
err = rows.MapScan(results)
if err := enc.Encode(results); err != nil {
fmt.Fprintf(w,"%s\n", results)
}
}
{“ USER_ID”:“ JD”,“ USER_NAME”:“ John Doe”}
{“ USER_ID”:“ JAD”,“ USER_NAME”:“ Jane Doe”}
{“ USER_ID”:“ DD”,“ USER_NAME”:“ Donald Duck”}
删除错误处理只是为了测试。它显示了错误的结果,但应将其打印到浏览器中。
rows, err = db.Queryx(query)
for rows.Next() {
results := make(map[string]interface{})
err = rows.MapScan(results)
enc.Encode(results)
fmt.Fprintf(w,"%s\n", results)
}
地图[USER_ID:JD USER_NAME:John Doe]
地图[USER_ID:JAD USER_NAME:Jane Doe]
地图[USER_ID:DD USER_NAME:唐老鸭]
仍然有一个问题。如何将正确的结果打印到浏览器?
如果要将输出格式化为JSON,最好使用该json
包。有一个良好的书面介绍JSON处理这个博客帖子,但一般的Marshal
功能很乐意为地图上map[string]interface{}
哪里interface{}
是任何其他类型的,它能够引领。
b, err := json.Marshal(m)
这将返回一个字节数组,因此您需要将其转换为字符串:
m := map[string]string{
"USER_ID":"JD",
"USER_NAME":"John Doe",
}
b, err := json.Marshal(m)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(b))
https://play.golang.org/p/rffsuI4BL35
但是,由于您知道将要打印出编码结果,因此最好使用流式编码器:
m := map[string]string{
"USER_ID":"JD",
"USER_NAME":"John Doe",
}
enc := json.NewEncoder(os.Stdout)
if err := enc.Encode(m); err != nil {
log.Fatal(err)
}
https://play.golang.org/p/l2-BOUK3yn9
对于您的代码,它看起来像这样:
enc := json.NewEncoder(w)
rows, err = db.Queryx(query)
// Note: you should check err here
for rows.Next() {
results := make(map[string]interface{})
err = rows.MapScan(results)
// Note: You should check err here
if err := enc.Encode(results); err != nil {
// Whatever you want to do in an encoding error
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句