我正在使用Go中的json结构输入流。我从标准输入上的另一个应用程序接收输入流,并且无法更改通信协议。
我的问题是每个json结构都以非json字符串行终止:“ end”(不带引号)。
我正在使用Golang编码器/ json包来解码从stdin接收到的json。问题在于,第二次我使用msg调用解码器时,解码器会产生错误:“无效字符’e’正在寻找值的开头”。
问题当然是,“ end”字符串未经过json编码。我想知道如何让Go的json解码器跳过此字符串?
一些样本输入:
{"command": "ack", "id": "1231231"} end {"command": "fail", "id": "1231231"} end { "command": "log", // the message to log "msg": "hello world!" } end
我尝试过的事情:
任何帮助,将不胜感激。
因此,我能够提出的最佳解决方案是:
我必须编写的代码:
// Create a buffer to hold the stream data data := make([]byte, 5000) // Read data from stdin in a loop for { _, err = os.Stdin.Read(data) if err != nil { panic(err) } index := bytes.Index(data, []byte("\n")) data = data[:index] var myStruct MyStruct err = json.Unmarshal(data, &myStruct) if err != nil { panic(err) } //(Do something with myStruct) }