the JSON and Go blog post结尾你会发现这个示例程序:
package main
import (
"encoding/json"
"log"
"os"
)
func main() {
dec := json.NewDecoder(os.Stdin)
enc := json.NewEncoder(os.Stdout)
for {
var v map[string]interface{}
if err := dec.Decode(&v); err != nil {
log.Println(err)
return
}
for k := range v {
if k != "Name" {
delete(v, k)
}
}
if err := enc.Encode(&v); err != nil {
log.Println(err)
}
}
}
我用 go build json_decoder.go
编译了这个,然后在 bash 中运行该程序:
echo '{"Name":"Wednesday","Age":6,"Parents":["Gomez","Morticia"]}' | json_decoder
并收到此输出:
{"Name":"Wednesday"}
2019/08/17 22:09:20 EOF
第一行输出正是我所期望的。但是 2019/08/17 22:09:20 EOF
行来自哪里?
最佳答案
当到达 EOF
时,解码器返回 io.EOF
然后由记录器 log.Println(err)
输出,并添加时间戳。
例如,您可以在像这样解码时检查EOF
if err := dec.Decode(&v); err != nil {
if err != io.EOF {
log.Println(err)
}
return
}
输出:
➜ echo '{"Name":"Wednesday","Age":6,"Parents":["Gomez","Morticia"]}' | ./json_decoder {"Name":"Wednesday"}
关于go - json.Encoder 中的日期输出来自哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57541199/