我如何以json格式输出map [string] interface {}?

西伯特:

使用时格式化出现问题 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:唐老鸭]

仍然有一个问题。如何将正确的结果打印到浏览器?

蒂莫西·琼斯(Timothy Jones):

如果要将输出格式化为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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用map [string] interface {}:

map [string] interface {}和interface {}之间的区别

将map [interface {}] interface {}转换为map [string] string

正确使用map [string] interface {}?

从String到map [string] interface {} golang

使用map [string] int作为map [interface {}] interface {}类型的参数

读取map [string] interface {}中的数据

从json合并两个map [string] interface {}

如何将 map[string]interface{} 转换为 map[string]string

如何检查声明为map [string] interface {}的变量实际上是map [string] string?

如何通过map [string] interface {}创建字符串映射?

如何向 map[string]interface{} 添加新值

如何比较map [string] interface {}的值字符串

如何通过map [string] interface {}进行递归迭代

在map [string] interface {}的值上键入switch到[] map [string] interface {}

JSON解码为struct作为interface {}产生map [string] interface {}而不是struct

我如何将BSON文档转换为map [string] interface {}

转到:强制转换类型无法将map [string] interface {}映射到map [string] string

如何将map [string] interface {}中的不同值转换为string类型

在go开发中过度使用map [string] interface {}?

gob:类型未注册的接口:map [string] interface {}

解组map [string] interface {}时发生mgo错误

在map [string] interface {}中检查多个键时使用OR逻辑

在Golang中将属性添加到嵌套map [string] interface {}

在Go中为map [string] interface {}创建方法

在Golang中访问类型为map [string] interface {}的嵌套地图

通过提供键从map [string] interface {}调用函数

类型化的嵌套映射map [string] interface {}返回“类型interface {}不支持索引”

解组映射到map [string] interface {}后,对ma [string] [] string的类型断言失败