2

以下のjsonオブジェクトがあるとしましょう:

{
  "d": {
    "e": {
      "bar": 2
    }
  },
  "a": {
    "b": {
      "c": {
        "foo": 1
      }
    }
  }
}

入力せずに値 foo を取得したい'.a.b.c.foo'

私はできることを理解しています... echo '{ "a":{"b":{"c":{ "foo":1}}},"d":{"e":{"bar":2}}}' | jq '.[][][].foo'しかし、jqに再帰的なワイルドはありますか? お気に入り **?jq が * をサポートしていないことは確かです。jq が jsonpath をサポートする方法はありますか? それとも、json パスをサポートする別の cli ツールでさえありますか?

4

1 に答える 1

3

jq 1.4では、これを行うことができます:

$ jq '..|.foo?' file.json

1.3で立ち往生している場合は、使用できます

$ jq 'recurse(if type == "array" or type == "object" then .[] else empty end) | if type == "object" then . else empty end | .foo' file.json

これはちょっと言い過ぎです... そのため、1.4 には..、 内のすべての iterable を再帰的に再帰する.?、存在しないものにインデックスを付けることを気にしない 演算子 があります。

于 2014-06-19T06:37:53.830 に答える