簡體   English   中英

如何使用jq有條件地生成所有JSON個路徑

[英]How to generate all JSON paths conditionally with jq

我任意嵌套了 JSON 個對象,如下所示。

{
  "parent1" : "someval"`,
  "parent2" : {
     "a" : "someval",
     "b" : "someval"
   },
  "parent3" : {
     "child1" : { 
        "a" : "someval"
      },
     "child2" : { 
        "b" : "someval"
      }
   }
}

我需要通過它們遞歸 go 並檢查是否有任何父項具有子鍵ab或兩者,並生成該父項的 JSON 路徑,如下所示:

Output:
parent2 
parent3.child1
parent3.child2

我試過使用

jq -r 'path(..) | map (. | tostring) | join (".")

這有助於我生成所有路徑,但我還沒有找到一種方法來成功地將has("a")等條件與path結合起來。 我怎么能go一下實現呢?

您可以使用index來檢查您的鍵是否在path數組中:

path(..) | select(index("a") or index("b")) | join(".")
"parent2.a"
"parent2.b"
"parent3.child1.a"
"parent3.child2.b"

JqPlay演示


如果您不想要最后一個鍵,可以添加[:-1]以“刪除”每個數組中的最后一個索引到 output:

path(..) | select(index("a") or index("b"))[:-1] | join(".")
"parent2"
"parent2"
"parent3.child1"
"parent3.child2"

JqPlay演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM