Go 如何将map[string]接口{}打印为json?
使用Go 如何将map[string]接口{}打印为json?,go,Go,使用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) fmt.Fprintf(w,"%v \n", results) map[str
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)
fmt.Fprintf(w,"%v \n", results)
map[string]接口{}{“USER_ID”:“JD”,“USER_NAME”:“John Doe”}
映射[字符串]接口{}{“用户ID”:“JAD”,“用户名”:“Jane Doe”}
映射[字符串]接口{}{“用户ID”:“DD”,“用户名”:“唐老鸭”}
仅使用%v
fmt.Fprintf(w,"%#v \n", results)
fmt.Fprintf(w,"%v \n", results)
地图[用户ID:JD用户名:John Doe]
地图[用户ID:JAD用户名称:Jane Doe]
地图[用户ID:DD用户名称:唐老鸭]
所需的输出是去掉map[string]接口{}
{“USER_ID”:“JD”,“USER_NAME”:“John Doe”}
{“用户ID”:“JAD”,“用户名称”:“Jane Doe”}
{“用户名”:“DD”,“用户名”:“唐老鸭”}
这可能吗
使用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”}
{“用户ID”:“JAD”,“用户名称”:“Jane Doe”}
{“用户名”:“DD”,“用户名”:“唐老鸭”}
删除错误处理只是为了测试。它会显示错误的结果,但会按应有的方式打印到浏览器中
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)
}
地图[用户ID:JD用户名:John Doe]
地图[用户ID:JAD用户名称:Jane Doe]
地图[用户ID:DD用户名称:唐老鸭]
还有一个问题。我如何将正确的结果打印到浏览器?如果您想将输出格式化为JSON,最好使用这个包。JSON处理有一个写得很好的介绍,但通常
封送
函数很乐意获取映射[string]接口{}
其中接口{}
是它能够封送的任何其他类型:
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))
但是,由于您知道只需打印编码结果,因此最好使用流式编码器:
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)
}
对于您的代码,它如下所示:
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
}
}
你必须自己做,而不是依赖printfverb@Flimzy您能举个例子吗?看起来您想要的恰好是JSON编码,所以请使用encoding/JSON包。@Peter有没有链接或提示如何将encoding/JSON与sqlx一起使用?这与sqlx无关。您想格式化map[string]接口{}。使用MapScan填充的事实与此无关。encoding/json与标准库中的所有其他包一样。感谢您提供了详尽的答案!它确实为我指明了正确的方向,但仍然存在一些小问题。请看我的更新问题。我推荐您,您的更新问题与初始问题无关问一个新问题。哦,我没有看到你在原来的问题中给某个特定的
作者写了信。我已经编辑了我的答案。是的!效果更好。谢谢!但是数值编码不正确:“数量”:“MS4wMA==”。为什么?虽然这没有解决我的整个问题,但这是对我问题的准确回答。谢谢!