簡體   English   中英

jq基於鍵值過濾器查詢json鍵

[英]jq query json key based on key value filter

我有一個帶鍵的json文件,值是帶鍵值對的json。 我想根據內部鍵值對過濾並提取鍵。 任何幫助是極大的贊賞

示例json數據:

{
    "key1": {
      "filterkey": "filtervalue",
      "key1": "value1"
    },
    "key2": {
      "key1": "value1",
      "key2": "value2"
    }
}
  • 過濾器:“ filterkey”:“ filtervalue”
  • 預期輸出:“ key1”

如果您輸入的json是穩定的,並且您不需要控制任何邊緣情況(任意深度,頂級類型不匹配,例如"key1": "not a dict" ),那么這可以解決您的問題:

ret = []
for k, v in js.items():
    if v.get("filterkey") == "filtervalue":
        ret.append(k)

運行代碼片段以查看輸出:

  var jsonObject = { "key1": { "filterkey": "filtervalue", "key1": "value1" }, "key2": { "key1": "value1", "key2": "value2" } }; function filterKey(jsonObject, keySearch, valueSearch) { var result = null; for (const key in jsonObject) { if (jsonObject.hasOwnProperty(key) && jsonObject[key][keySearch] !== undefined && jsonObject[key][keySearch] === valueSearch) { result = key; break; } } return result; } alert(filterKey(jsonObject, 'filterkey', 'filtervalue')); 

jq '.[] | select( .filterkey == "filtervalue") | to_entries[1]| .key'   sample.json

通過filterkey選擇,將對象變成整個鍵值,然后使用第二個條目的鍵。 輸出為:

"key1"

在該示例中,“ key1”出現了幾次,但看起來您想要最外層的鍵名。 如果是這樣,那么使用to_entries是一個好方法,例如:

to_entries[]
| if .value.filterkey == "filtervalue" then .key else empty end

或等效地:

to_entries[]
| select(.value.filterkey == "filtervalue" )
| .key

暫無
暫無

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

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