Json直接编组到标准输出

  • 本文关键字:标准输出 Json json go
  • 更新时间 :
  • 英文 :


我正在尝试学习Golang,在这样做的同时,我写了下面的代码(更大的自我学习项目的一部分),并从陌生人那里获得了代码审查,其中一条评论是,">你可以直接将其编组到标准输出,而不是编组到堆,然后转换为字符串,然后将其流式传输到标准输出">

我已经阅读了encoding/json包和io包的文档,但无法拼凑出所需的更改。

任何指示或帮助将是伟大的。

// Marshal the struct with proper tab indent so it can be readable
b, err := json.MarshalIndent(res, "", "    ")
if err != nil {
log.Fatal(errors.Wrap(err, "error marshaling response data"))
}
// Print the output to the stdout
fmt.Fprint(os.Stdout, string(b))

编辑

我在文档中发现了下面的代码示例:

var out bytes.Buffer
json.Indent(&out, b, "=", "t")
out.WriteTo(os.Stdout)

但是在写stdout之前,它还是先写堆。不过,它确实省去了将其转换为字符串的一个步骤。

创建并使用指向os.Stdoutjson.Encoderjson.NewEncoder()接受任何io.Writer作为目的地。

res := map[string]interface{}{
"one": 1,
"two": "twotwo",
}
if err := json.NewEncoder(os.Stdout).Encode(res); err != nil {
panic(err)
}

这将输出(直接到Stdout):

{"one":1,"two":"twotwo"}

如果你想设置缩进,使用它的Encoder.SetIndent()方法:

enc := json.NewEncoder(os.Stdout)
enc.SetIndent("", "  ")
if err := enc.Encode(res); err != nil {
panic(err)
}

这将输出:

{
"one": 1,
"two": "twotwo"
}

试试Go Playground上的例子。

最新更新