JSON 使用 JQ 在 linux 中解析文件,select 某些元素取决于特定元素中包含的值
JSON file parsing in linux with JQ, select some elements depending on value contained in a specific element
我是一个新的 jq 用户,我很难找到解决我问题的好方法。
我有这个示例 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" : ...
...
}
]
}
我有一个名为 "two" 的数组,它包含多个子结构(子结构 0、子结构 1、子结构 2、...、子结构 x)。我想要 select '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 没有 test/1
,那么你可以升级或使用 index/1
代替。)
对于给定的输入,经过校正后,使用 -c 选项调用 jq 会产生:
["ac_value_1","aa_value_1"]
我是一个新的 jq 用户,我很难找到解决我问题的好方法。
我有这个示例 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" : ...
...
}
]
}
我有一个名为 "two" 的数组,它包含多个子结构(子结构 0、子结构 1、子结构 2、...、子结构 x)。我想要 select '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 没有 test/1
,那么你可以升级或使用 index/1
代替。)
对于给定的输入,经过校正后,使用 -c 选项调用 jq 会产生:
["ac_value_1","aa_value_1"]