簡體   English   中英

在Linux中使用JQ解析JSON文件,根據特定元素中包含的值選擇一些元素

[英]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)。 我想選擇“ 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"]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM