[英]jq query json key based on key value filter
我有一個帶鍵的json文件,值是帶鍵值對的json。 我想根據內部鍵值對過濾並提取鍵。 任何幫助是極大的贊賞
示例json數據:
{
"key1": {
"filterkey": "filtervalue",
"key1": "value1"
},
"key2": {
"key1": "value1",
"key2": "value2"
}
}
如果您輸入的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.