在linux中使用JQ解析JSON文件时,根据特定元素中包含的值选择一些元素
我是一个新的jq用户,我很难找到解决问题的好方法 我有一个示例json文件:在linux中使用JQ解析JSON文件时,根据特定元素中包含的值选择一些元素,json,parsing,data-manipulation,jq,Json,Parsing,Data Manipulation,Jq,我是一个新的jq用户,我很难找到解决问题的好方法 我有一个示例json文件: { "one":"one_value", "two": [ { // sub structure 0 "aa" : [ "aa_value_0" ], "ab" : { ... }, "ac" : [ "ac_value_0"
{
"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" : ...
...
}
]
}
我有一个名为“two”的数组,它包含几个子结构(子结构0、子结构1、子结构2、…、子结构x)。我想选择“ac”和“aa”值,其中ab.abb键(在同一子结构中)包含特定单词。
所有子结构都具有相同的结构
在我的示例中,如果我搜索单词“tata”,我必须获得值“aa_value_1”和“ac_value_1”,因为在子结构“1”中,ab.abb字段包含单词“tata”(tototatatiti)
我该怎么做?
谢谢:)需求在几个方面并不完全清楚,但以下查询与描述匹配,并生成它应该生成的两个值,假设示例输入已修改为有效JSON:
.two[]
| select( .ab.abb | type == "array")
| select( .ab.abb[] | test("tata") )
| [ .ac[],.aa[] ]
(如果.two
与上述规则一样,则不需要上面的第二行。此外,如果jq没有测试/1
,则可以升级或使用索引/1
。)
对于给定的输入,在校正之后,使用-c选项调用jq将生成:
["ac_value_1","aa_value_1"]
谢谢,太完美了:)