jq--同じキーの複数の値に対するストリームフィルター

理科

キーの値を使用して内部JSONオブジェクトをフィルタリングする必要がある非常に大きなJSONを処理しています。私のJSONは次のようになります。

{"userActivities":{"L3ATRosRdbDgSmX75Z":{"deviceId":"60ee32c2fae8dcf0","dow":"Friday","localDate":"2018-01-20"},"L3ATSFGrpAYRkIIKqrh":{"deviceId":"60ee32c2fae8dcf0","dow":"Friday","localDate":"2018-01-21"},"L3AVHvmReBBPNGluvHl":{"deviceId":"60ee32c2fae8dcf0","dow":"Friday","localDate":"2018-01-22"},"L3AVIcqaDpZxLf6ispK":{"deviceId":"60ee32c2fae8dcf0","dow":"Friday,"localDate":"2018-01-19"}}}

2018-01-20のlocalDateまたは「2018-01-21」のlocalDateのようにlocalDate値にフィルターを設定して、出力が次のようになるようにします。

{"userActivities":{"L3ATRosRdbDgSmX75Z":{"deviceId":"60ee32c2fae8dcf0","dow":"Friday","localDate":"2018-01-20"},"L3ATSFGrpAYRkIIKqrh":{"deviceId":"60ee32c2fae8dcf0","dow":"Friday","localDate":"2018-01-21"}}}

ここで同様の質問をしましたが、複数の値にフィルターを適用し、JSONの元の構造を保持する必要があることに気付きました。

https://stackoverflow.com/questions/52324497/how-to-filter-json-using-jq-stream

よろしくお願いします!

ピーク

jqクックブックから借りましょうdef atomize(s)

# Convert an object (presented in streaming form as the stream s) into
# a stream of single-key objects
# Examples:
#   atomize({a:1,b:2}|tostream)
#   atomize(inputs) (used in conjunction with "jq -n --stream")
def atomize(s):
  fromstream(foreach s as $in ( {previous:null, emit: null};
      if ($in | length == 2) and ($in|.[0][0]) != .previous and .previous != null
      then {emit: [[.previous]], previous: $in|.[0][0]}
      else { previous: ($in|.[0][0]), emit: null}
      end;
      (.emit // empty), $in) ) ;

OPによって記述された最上位オブジェクトにはキーが1つしかないため、2018年8月のオブジェクトを次のように選択できます。

atomize(1|truncate_stream(inputs))
| select( .[].localDate[0:7] == "2018-08")

これらを複合オブジェクトに収集する場合は、メモリに注意する必要がある可能性があるため、選択したオブジェクトを別のプログラム(awkやjqなど)にパイプすることをお勧めします。そうでなければ、私は一緒に行きます:

def add(s): reduce s as $x (null; .+$x);

{"userActivities": add(
    atomize(1|truncate_stream(inputs | select(.[0][0] == "userActivities")))
    | select( .[].localDate[0:7] =="2018-01") ) }

変化

トップレベルオブジェクトに複数のキーがある場合は、次のバリエーションが適切です。

atomize(1|truncate_stream(inputs | select(.[0][0] == "userActivities")))
| select( .[].localDate[0:7] =="2018-08")

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

jqの複数のフィールドに関数を適用する方法

分類Dev

ネストされたオブジェクトのフィールドに対するJQフィルタリング

分類Dev

jqの配列に含まれるフィルター値

分類Dev

JQを使用して、複数のJSONフィールドで同じ操作を実行します

分類Dev

複数の引数を持つJQ選択フィルター

分類Dev

正規表現パターンを構築する際のjqの値によるフィルタリング

分類Dev

JQ:キーを別のファイルの対応する値に置き換えます

分類Dev

JQ:キーのフィルタリング

分類Dev

jqを使用してjsonオブジェクトのストリームをフィールド値でソートする方法

分類Dev

サブオブジェクト値のjqフィルター

分類Dev

jqで一度に複数のキーを削除する

分類Dev

複数の値が同じ行にあるように、jqを使用してプリティプリントする方法は?

分類Dev

「jq」で複数行のテキストをエスケープする

分類Dev

複雑なjqフィルター

分類Dev

jqでフィールド値の複数の割り当てを行う方法は?

分類Dev

キーに動的な値がある場合、jqでjsonをフィルタリングする方法

分類Dev

jqを使用して、ネストされたjsonをキー値でフィルタリングします

分類Dev

jqを使用して同じ構造のネストされたjsonファイルをマージする方法

分類Dev

ネストされた配列のexistance及びその中にネストされたアイテムの値をベースフィルタJSONに使用JQ

分類Dev

'null'値のみのjqフィルター

分類Dev

jq:csv出力用のフィルターを作成する

分類Dev

jqストリームを使用してJSONをフィルタリングする方法

分類Dev

jqを使用してjsonツリー内の複数のキー/値を解析する

分類Dev

jqを2回呼び出さずに説明するためのAWSのjqフィルター?

分類Dev

bashでjqフィルターを使用してキーと値をフィルター処理する方法

分類Dev

jqを使用してJSON配列にコンマ区切りのリストフィールドを作成する

分類Dev

jq:ネストされたキーをフィルタリングする方法は?

分類Dev

jqの値に対してターミナル操作を実行します

分類Dev

JQを使用して複数のキーを選択する方法

Related 関連記事

  1. 1

    jqの複数のフィールドに関数を適用する方法

  2. 2

    ネストされたオブジェクトのフィールドに対するJQフィルタリング

  3. 3

    jqの配列に含まれるフィルター値

  4. 4

    JQを使用して、複数のJSONフィールドで同じ操作を実行します

  5. 5

    複数の引数を持つJQ選択フィルター

  6. 6

    正規表現パターンを構築する際のjqの値によるフィルタリング

  7. 7

    JQ:キーを別のファイルの対応する値に置き換えます

  8. 8

    JQ:キーのフィルタリング

  9. 9

    jqを使用してjsonオブジェクトのストリームをフィールド値でソートする方法

  10. 10

    サブオブジェクト値のjqフィルター

  11. 11

    jqで一度に複数のキーを削除する

  12. 12

    複数の値が同じ行にあるように、jqを使用してプリティプリントする方法は?

  13. 13

    「jq」で複数行のテキストをエスケープする

  14. 14

    複雑なjqフィルター

  15. 15

    jqでフィールド値の複数の割り当てを行う方法は?

  16. 16

    キーに動的な値がある場合、jqでjsonをフィルタリングする方法

  17. 17

    jqを使用して、ネストされたjsonをキー値でフィルタリングします

  18. 18

    jqを使用して同じ構造のネストされたjsonファイルをマージする方法

  19. 19

    ネストされた配列のexistance及びその中にネストされたアイテムの値をベースフィルタJSONに使用JQ

  20. 20

    'null'値のみのjqフィルター

  21. 21

    jq:csv出力用のフィルターを作成する

  22. 22

    jqストリームを使用してJSONをフィルタリングする方法

  23. 23

    jqを使用してjsonツリー内の複数のキー/値を解析する

  24. 24

    jqを2回呼び出さずに説明するためのAWSのjqフィルター?

  25. 25

    bashでjqフィルターを使用してキーと値をフィルター処理する方法

  26. 26

    jqを使用してJSON配列にコンマ区切りのリストフィールドを作成する

  27. 27

    jq:ネストされたキーをフィルタリングする方法は?

  28. 28

    jqの値に対してターミナル操作を実行します

  29. 29

    JQを使用して複数のキーを選択する方法

ホットタグ

アーカイブ