Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在linux中使用JQ解析JSON文件时,根据特定元素中包含的值选择一些元素_Json_Parsing_Data Manipulation_Jq - Fatal编程技术网

在linux中使用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"

我是一个新的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)。我想选择“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"]

谢谢,太完美了:)