在 Go 中过滤 json 流中的非 json 内容

我正在使用 Go 中的 json 结构输入流。我从 stdin 上的另一个应用程序接收输入流,但我无法更改通信协议。


我遇到的问题是每个 json 结构都以非 json 字符串行终止:“end”(不带引号)。


我正在使用 Golang 编码器/json 包来解码我从标准输入接收的 json。问题是解码器在我第二次用 msg 调用它时产生错误:“无效字符 'e' 寻找值的开头”。


当然,问题是“结束”字符串不是 json 编码的。我想知道如何让 Go 的 json 解码器跳过这个字符串?


一些示例输入:


{"command": "ack", "id": "1231231"}

end

{"command": "fail", "id": "1231231"}

end

{

    "command": "log",

    // the message to log

    "msg": "hello world!"

}

end

我尝试过的事情:

  • 我声明: endStr := make([]byte, 10)

  • 我尝试使用 fmt.Fscanf(os.Stdin, "%s", endStr) 来读取字符串,但没有读取任何数据。

  • 我尝试使用 os.Stdin.Read(endStr),但它也没有返回任何数据。

  • 在我读取第一个 json 结构后,dec.Buffered() 返回一个包含“end”字符串的 io.Reader,但我不知道如何告诉解码器跳过它。

任何帮助,将不胜感激。


达令说
浏览 197回答 3
3回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go