故事是來自於有個 key-value pair 的 json 資料:
% echo '{"A":{"field":"v1"},"B":{"field":"v2"}}' | jq ''
{
"A": {
"field": "v1"
},
"B": {
"field": "v2"
}
}
想要透過 jq 過濾時,也能保留 key 資料,這時就用 to_entries 來達成:
% echo '{"A":{"field":"v1"},"B":{"field":"v2"}}' | jq 'to_entries[]'
[
{
"key": "A",
"value": {
"field": "v1"
}
},
{
"key": "B",
"value": {
"field": "v2"
}
}
]
% echo '{"A":{"field":"v1"},"B":{"field":"v2"}}' | jq 'to_entries[]'
{
"key": "A",
"value": {
"field": "v1"
}
}
{
"key": "B",
"value": {
"field": "v2"
}
}
接著要再過濾指定欄位帶有 關鍵字 時,就靠 select 跟 index 來達成:
% echo '{"A":{"field":"v1"},"B":{"field":"v2"}}' | jq 'to_entries[] | select( .value.field | index("v2") >= 0 )'
{
"key": "B",
"value": {
"field": "v2"
}
}
此例是輸出 value.field 數值帶有 v2 關鍵字。而 index 之外的還有 match 等支援 regular expression 的用法,只是要用 !match 時有點卡卡串不太起來,就乾脆用 index 來處理。
沒有留言:
張貼留言