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/

10-13 08:45
查看更多