2017-05-30 68 views
0

我是一個新的jq用戶,我有一些難以找到我的問題的好方法。在JQ linux中解析JSON文件,根據特定元素中包含的值選擇一些元素

我有這個示例JSON文件:

{ 
    "one":"one_value", 
    "two": [ 
     { // sub structure 0 
      "aa" : [ 
       "aa_value_0" 
      ], 
      "ab" : { ... }, 
      "ac" : [ 
       "ac_value_0" 
      ] 
     }, 
     { // sub structure 1 
      "aa": [ 
       "aa_value_1" 
      ], 
      "ab": { 
       "aba": [ 
        "aba_value_1" 
       ], 
       "abb": [ 
        "tototatatiti" 
       ], 
       "abc": [ 
        "abc_value_1" 
       ] 
      }, 
      "ac": [ 
       "ac_value_1" 
      ] 
     }, 
     { // sub structure 2 
      "aa" : ... 
      ... 
     }, 
     ... 
     { // sub structure x 
      "aa" : ... 
      ... 
     } 
    ] 
} 

我有一個數組命名爲「二」誰包含多個子結構(子結構0,子結構1,子結構2,...,子結構X)。我想選擇'ac'和'aa'值,其中ab.abb鍵(在相同的子結構中)包含特定的單詞。 所有子結構都具有相同的結構。因爲在子結構「1」中,ab.abb字段包含單詞「tata」(其中,「tata」 tototatatiti)

我該怎麼做? 謝謝:)

回答

1

的要求是不是在幾個方面完全清楚,但下面的查詢說明相匹配,併產生它應該假設的例子中輸入已被修改成爲有效的JSON兩個值:

.two[] 
| select(.ab.abb | type == "array") 
| select(.ab.abb[] | test("tata")) 
| [ .ac[],.aa[] ] 

(你不會需要第二線以上,如果.two是作爲常規的說明。另外,如果你的JQ沒有test/1,那麼你可以升級或使用index/1代替。)

在給定的輸入,整改後,invoca與-c選項jq的產生:

["ac_value_1","aa_value_1"] 
+0

謝謝你,它的完美:) – user2137454