json / jq:配列内のサブ要素のマルチレベルグループ化

デビッドファースト

私は、複数の異なるレベルでjsonから情報を取得し、着信jsonを行ごとのデータに解析する必要があるスクリプトを作成しています。jq使用してデータを解析しています。

着信jsonは「タスク」の配列です。各タスク[つまり、配列の各要素]は、次のようなオブジェクトです。

{
  "inputData": {
    "transfers": [
      {
        "source": {
          "directory": "/path/to/source",
          "filename": "somefile.mp3"
        },
        "target": {
          "directory": "/path/to/target",
          "filename": "somefile.mp3"
        }
      },
      {
        "source": {
          "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><delivery>content description</delivery>",
          "encoding": "UTF-8"
        },
        "target": {
          "directory": "/path/to/target",
          "filename": "somefile.xml"
        }
      }
    ]
  },
  "outputData": {
    "transferDuration": "00:00:37:10",
    "transferLength": 187813298,
  },
  "updateDate": "2020-02-21T14:37:18.329Z",
  "updateUser": "bob"
}

すべてのタスクを読み、それぞれについて、次のフィールドで構成される1行を出力したいと思います。

task[n].inputData.transfers[].target.filename, task[n].outputData.transferLength, task[n].updateDate

task[].inputData.transfers[]配列内の複数のエントリの中から「正しい」単一のエントリを選択する場所でも、適切なフィールドを正しく選択する場所にフィルタチェーンがありますが、複数の出力を取得しようとすると単一の要素の場合、チェーンは配列を3回繰り返し、次のようになります。

task[0].inputData.transfers[].target.filename
task[1].inputData.transfers[].target.filename
task[2].inputData.transfers[].target.filename
... 
task[n].inputData.transfers[].target.filename

次に、outputData.transferLengthすべての要素
updateDateフィールドの結果次にすべての要素フィールドの結果

これが私のフィルターチェーンです:

'(.tasks[].inputData.transfers[] | select(.target.filename | match("[Xx][Mm][Ll]$")).target.filename), .tasks[].outputData.transferLength, .tasks[].updateDate'

配列の各要素について、これらすべてのマルチレベル要素をグループ化する効率的な方法が必要だと思います。' with ... '句のようなものwith tasks[] : blablabla、のようなものですが、その方法がわかりません。誰か助けてもらえますか?

デビッドファースト

私はついに答えを見つけました。トリックは.tasks[]、パレンがグループとしてフィールド要素の周りに配置された式にパイプすることでした。これにより、パレン内にあるものはすべて、配列の各要素に順番に個別に適用されるようです。次に、@ dmitryの例をガイドとして使用して、要素を右角かっこと左角かっこ内に配置して、選択できる配列要素を再作成します。配列要素は、それぞれ1行に出力できます| @csvだから私のために働いた最後のチェーンは:

.task[] | ([.inputData.transfers[].target.filename, .outputData.transferLength, .updateDate]) | [(.[0],.[2],.[3])] | @csv'

残念ながら、私はmatch()この呼び出しで作業することができませんでしsub()これらのそれぞれにより、jqはコアをダンプする直前に役に立たないエラーメッセージを表示しました。

返信してくれた人に感謝します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

SpringブートのマルチレベルサブメニューJSON

分類Dev

マルチレベルのJSON配列を解析する方法は?

分類Dev

マルチレベルのjsonデータ配列を使用したjquery

分類Dev

マルチレベルのJSONをループする方法

分類Dev

JQマルチレベルのjsonを作成する

分類Dev

json文字列のマルチレベルphp配列。間違った出力

分類Dev

JSON []フィールド配列タイプ内の配列要素のクエリ

分類Dev

テーブル内の配列JSON内の配列の処理

分類Dev

OracleQueryでのjson配列のグループ化

分類Dev

マルチレベルJSONの属性タイプ(辞書/配列)がありません

分類Dev

オブジェクトのJSON配列をグループ化する方法

分類Dev

fluentdを使用してJSON内のマルチレベルのネストされたエスケープされたJSON文字列を処理します

分類Dev

PHPでのJSONマルチデプティ配列のフラット化

分類Dev

マルチレベルのJsonデータ配列を単一のAngularオブジェクトに割り当てる方法は?

分類Dev

トップレベルのjson配列oracleで要素を検索する

分類Dev

JSONデータ配列を別の配列にグループ化する

分類Dev

マルチレベルJSONのスペースキー

分類Dev

jqはループ内の配列にフィールドを追加し、json全体を返します

分類Dev

jqueryを使用して4レベルのjson配列をループする方法

分類Dev

jsonのマルチレベルネストメニュー

分類Dev

トップレベルの配列であるjsonのスキーマを参照する方法

分類Dev

キーでグループ化して、jqを使用して複数のファイルからjson配列を集約します

分類Dev

MongoDB内のネストされたjson配列ドキュメントのコレクションをカウントしてグループ化します

分類Dev

GolangでのトップレベルのJSONオブジェクトのマーシャリング解除

分類Dev

JSONオブジェクトのようなものを配列にグループ化する

分類Dev

ハイチャート:ツールチップのJson配列

分類Dev

ionic2でのJSON配列のグループ化と合計

分類Dev

複数のキーを使用してマルチレベルのjsonツリー内を検索する

分類Dev

JSON.NETを使用したマルチレベルJSONの解析

Related 関連記事

  1. 1

    SpringブートのマルチレベルサブメニューJSON

  2. 2

    マルチレベルのJSON配列を解析する方法は?

  3. 3

    マルチレベルのjsonデータ配列を使用したjquery

  4. 4

    マルチレベルのJSONをループする方法

  5. 5

    JQマルチレベルのjsonを作成する

  6. 6

    json文字列のマルチレベルphp配列。間違った出力

  7. 7

    JSON []フィールド配列タイプ内の配列要素のクエリ

  8. 8

    テーブル内の配列JSON内の配列の処理

  9. 9

    OracleQueryでのjson配列のグループ化

  10. 10

    マルチレベルJSONの属性タイプ(辞書/配列)がありません

  11. 11

    オブジェクトのJSON配列をグループ化する方法

  12. 12

    fluentdを使用してJSON内のマルチレベルのネストされたエスケープされたJSON文字列を処理します

  13. 13

    PHPでのJSONマルチデプティ配列のフラット化

  14. 14

    マルチレベルのJsonデータ配列を単一のAngularオブジェクトに割り当てる方法は?

  15. 15

    トップレベルのjson配列oracleで要素を検索する

  16. 16

    JSONデータ配列を別の配列にグループ化する

  17. 17

    マルチレベルJSONのスペースキー

  18. 18

    jqはループ内の配列にフィールドを追加し、json全体を返します

  19. 19

    jqueryを使用して4レベルのjson配列をループする方法

  20. 20

    jsonのマルチレベルネストメニュー

  21. 21

    トップレベルの配列であるjsonのスキーマを参照する方法

  22. 22

    キーでグループ化して、jqを使用して複数のファイルからjson配列を集約します

  23. 23

    MongoDB内のネストされたjson配列ドキュメントのコレクションをカウントしてグループ化します

  24. 24

    GolangでのトップレベルのJSONオブジェクトのマーシャリング解除

  25. 25

    JSONオブジェクトのようなものを配列にグループ化する

  26. 26

    ハイチャート:ツールチップのJson配列

  27. 27

    ionic2でのJSON配列のグループ化と合計

  28. 28

    複数のキーを使用してマルチレベルのjsonツリー内を検索する

  29. 29

    JSON.NETを使用したマルチレベルJSONの解析

ホットタグ

アーカイブ