Goでjson構造の入力ストリームを処理しています。stdinで別のアプリケーションから入力ストリームを受信し、通信プロトコルを変更できません。
私が抱えている問題は、すべてのjson構造が非json文字列行で終了していることです: "end"(引用符なし)。
私はGolangエンコーダー/ jsonパッケージを使用して、stdinから受け取っているjsonをデコードしています。問題は、2回目に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
私が試したこと:
任意の助けいただければ幸いです。
だから私が思いついた最善の解決策は:
私が書かなければならなかったコード:
// 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)
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加