Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正确的Golang的JSON块输出_Go - Fatal编程技术网

正确的Golang的JSON块输出

正确的Golang的JSON块输出,go,Go,我一直在寻找解决这个问题的办法。它实际上来自sql数据库,但这也说明了问题: package main import ( "fmt" "encoding/json" ) func main() { m := map[string]string{ "USER_ID":"JD", "USER_NAME":"John Doe", } json, _ := json.Marshal(m) for i := 0; i <

我一直在寻找解决这个问题的办法。它实际上来自sql数据库,但这也说明了问题:

package main

import (
    "fmt"
    "encoding/json"
)

func main() {
    m := map[string]string{
      "USER_ID":"JD", 
      "USER_NAME":"John Doe",
    }

    json, _ := json.Marshal(m)
    for i := 0; i < 4; i++ {
       fmt.Println(string(json))
    }

}
所需的输出如下:

[{"USER_ID":"JD","USER_NAME":"John Doe"},
{"USER_ID":"JD","USER_NAME":"John Doe"},
{"USER_ID":"JD","USER_NAME":"John Doe"},
{"USER_ID":"JD","USER_NAME":"John Doe"}]
使用map[string]string或interface可以实现这一点吗

使用map[string]string或interface可以实现这一点吗

答案很简单——只要您想生成JSON格式的列表输出,就可以使用

下面是您所需输出()的示例:

主程序包
进口(
“fmt”
“编码/json”
)
func main(){
//定义一个贴图切片
var mySlice[]映射[string]字符串
//定义地图
m:=映射[字符串]字符串{
“用户ID”:“JD”,
“用户名”:“John Doe”,
}
//将贴图添加到切片4次
对于i:=0;i<4;i++{
mySlice=append(mySlice,m)
}
//打印切片
json,216;:=json.Marshal(mySlice)
fmt.Println(字符串(json))
}
//输出:[{“用户ID”:“JD”,“用户名称”:“John Doe”},{“用户ID”:“JD”,“用户名称”:“John Doe”},{“用户ID”:“JD”,“用户名称”:“John Doe”},{“用户ID”:“JD”,“用户名称”:“John Doe”}]

您将地图编组一次,然后重复打印它。json包究竟如何知道它是列表的一部分?如果您希望它成为一个列表,请将其设置为
[]映射[string]字符串
。或者手动打印括号和逗号。@Kaedys是对的,您不使用任何列表(切片),所以您不打印任何列表(切片)。或者,您可以构建列表并重复添加地图<代码>列表:=[]映射[字符串]字符串{};list=append(list,m)以防万一,您当前的输出是格式的,有些工具可以读取。@skovorodkin“…有些工具可以读取。”这就是我的想法,但最常见的方式似乎是格式[{},{}]。如果我错了,请纠正我。@sibert,视情况而定。例如,如果您将输出写入一个文件,然后运行另一个工具来处理它,那么使用JSON行可能是更好的方法,因为一行解析一个对象比一次解析整个文件更便宜。
[{"USER_ID":"JD","USER_NAME":"John Doe"},
{"USER_ID":"JD","USER_NAME":"John Doe"},
{"USER_ID":"JD","USER_NAME":"John Doe"},
{"USER_ID":"JD","USER_NAME":"John Doe"}]
package main

import (
    "fmt"
    "encoding/json"
)

func main() {
    // define a slice of maps
    var mySlice []map[string]string

    // define a map
    m := map[string]string{
      "USER_ID":"JD", 
      "USER_NAME":"John Doe",
    }

    // add the map 4 times to the slice
    for i := 0; i < 4; i++ {
        mySlice = append(mySlice, m)
    }

    // print the slice
    json, _ := json.Marshal(mySlice)
    fmt.Println(string(json))
}
// Output: [{"USER_ID":"JD","USER_NAME":"John Doe"},{"USER_ID":"JD","USER_NAME":"John Doe"},{"USER_ID":"JD","USER_NAME":"John Doe"},{"USER_ID":"JD","USER_NAME":"John Doe"}]