GoのJSONストリームでJSON以外のコンテンツをフィルタリングする

ジョン・ギルモア:

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

私が試したこと:

  • 私は宣言しました:endStr:= make([] byte、10)
  • 文字列を超えて読み取るためにfmt.Fscanf(os.Stdin、 "%s"、endStr)を使用しようとしましたが、データは読み取られません。
  • os.Stdin.Read(endStr)を使用しようとしましたが、データも返されません。
  • 最初のjson構造を読み取った後、dec.Buffered()は「終了」文字列を含むio.Readerを返しますが、これをスキップするようにデコーダーに指示する方法がわかりません。

任意の助けいただければ幸いです。

ジョン・ギルモア:

だから私が思いついた最善の解決策は:

  1. jsonデコーダーを捨てる
  2. stdinからバイトスライスを読み取り、
  3. ( "\ nend \ n")文字列を除外するためにスライスをトリミング
  4. トリミングされたスライスをjson Unmarshallerに渡します

私が書かなければならなかったコード:

// 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]

編集
0

コメントを追加

0

関連記事

分類Dev

別のリストJavaストリームのコンテンツ全体と一致するエントリでリストのコンテンツをフィルタリングします

分類Dev

ファイルのリストをコンテンツでフィルタリングする

分類Dev

別のリストのコンテンツを使用してリストをフィルタリングする

分類Dev

JSONストリームのコンテンツをフェッチする

分類Dev

Python-要素のコンテンツでリストをフィルタリングする方法は?

分類Dev

あるコントローラーのコンテンツを別のコントローラーのモデルでフィルタリングする(AngularJS)

分類Dev

selectステートメントを使用してリンクされたリストのコンテンツをフィルタリングする方法は?

分類Dev

Liferay6.2.GA2のスコープでWebコンテンツをプログラムでフィルタリングする

分類Dev

tdコンテンツで複数のテーブルをフィルタリングする方法

分類Dev

コンテキストレベルですべてのテーブルをフィルタリングする

分類Dev

データをリロードせずにDataGridViewのコンテンツをフィルタリングする

分類Dev

JQueryでページコンテンツをフィルタリングする

分類Dev

アイテムのタイトルと説明でツリービューをフィルタリングし、親を表示するアルゴリズム

分類Dev

iOSSwift-検索バーと検索表示を備えたカスタムセルを持つUITableViewのコンテンツをフィルタリングする

分類Dev

テラフォームリストで特定の値をフィルタリングする

分類Dev

別のストリームの値でストリームをフィルタリングする

分類Dev

mysql jsonクエリで文字列内のフィールドコンテンツを使用する方法は?

分類Dev

フィルタリング中にツリービューで特定のアイテムを展開する

分類Dev

javascriptから遅延ロードされたスクリプトタグjsonファイルのコンテンツを参照する方法は?

分類Dev

xPagesのリッチテキストフィールドのコンテンツをインデントする

分類Dev

PHPの要素のタイプでHTMLコンテンツをフィルタリングする

分類Dev

レコメンダーシステム:コンテンツベースのフィルタリングですか?

分類Dev

JavaサーブレットでJSON結果のレコードをフィルタリングする方法

分類Dev

javascriptのアイテムのプロパティでリストをフィルタリングする

分類Dev

パンダのデータフレームをリストでフィルタリングする

分類Dev

Djangoのテンプレートタグで2Dリストをフィルタリングする

分類Dev

タイムスタンプ年でjsonをフィルタリングする

分類Dev

文字列の出現によるデータフレームコンテンツのフィルタリング

分類Dev

タイプリストの列の値でデータフレームをフィルタリングする

Related 関連記事

  1. 1

    別のリストJavaストリームのコンテンツ全体と一致するエントリでリストのコンテンツをフィルタリングします

  2. 2

    ファイルのリストをコンテンツでフィルタリングする

  3. 3

    別のリストのコンテンツを使用してリストをフィルタリングする

  4. 4

    JSONストリームのコンテンツをフェッチする

  5. 5

    Python-要素のコンテンツでリストをフィルタリングする方法は?

  6. 6

    あるコントローラーのコンテンツを別のコントローラーのモデルでフィルタリングする(AngularJS)

  7. 7

    selectステートメントを使用してリンクされたリストのコンテンツをフィルタリングする方法は?

  8. 8

    Liferay6.2.GA2のスコープでWebコンテンツをプログラムでフィルタリングする

  9. 9

    tdコンテンツで複数のテーブルをフィルタリングする方法

  10. 10

    コンテキストレベルですべてのテーブルをフィルタリングする

  11. 11

    データをリロードせずにDataGridViewのコンテンツをフィルタリングする

  12. 12

    JQueryでページコンテンツをフィルタリングする

  13. 13

    アイテムのタイトルと説明でツリービューをフィルタリングし、親を表示するアルゴリズム

  14. 14

    iOSSwift-検索バーと検索表示を備えたカスタムセルを持つUITableViewのコンテンツをフィルタリングする

  15. 15

    テラフォームリストで特定の値をフィルタリングする

  16. 16

    別のストリームの値でストリームをフィルタリングする

  17. 17

    mysql jsonクエリで文字列内のフィールドコンテンツを使用する方法は?

  18. 18

    フィルタリング中にツリービューで特定のアイテムを展開する

  19. 19

    javascriptから遅延ロードされたスクリプトタグjsonファイルのコンテンツを参照する方法は?

  20. 20

    xPagesのリッチテキストフィールドのコンテンツをインデントする

  21. 21

    PHPの要素のタイプでHTMLコンテンツをフィルタリングする

  22. 22

    レコメンダーシステム:コンテンツベースのフィルタリングですか?

  23. 23

    JavaサーブレットでJSON結果のレコードをフィルタリングする方法

  24. 24

    javascriptのアイテムのプロパティでリストをフィルタリングする

  25. 25

    パンダのデータフレームをリストでフィルタリングする

  26. 26

    Djangoのテンプレートタグで2Dリストをフィルタリングする

  27. 27

    タイムスタンプ年でjsonをフィルタリングする

  28. 28

    文字列の出現によるデータフレームコンテンツのフィルタリング

  29. 29

    タイプリストの列の値でデータフレームをフィルタリングする

ホットタグ

アーカイブ