在JQ linux中解析JSON文件,根据特定元素中包含的值选择一些元素

问题描述:

我是一个新的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)

我该怎么做? 谢谢:)

的要求是不是在几个方面完全清楚,但下面的查询说明相匹配,并产生它应该假设的例子中输入已被修改成为有效的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