在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)
输出ojit_a,并带有时间戳。
例如,您可以在解码时检查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
{“名称”:“星期三”}
关于go - 日期输出从json.Encoder哪里来?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57541199/