2016-03-25 2 views
1

Мне нужно удалить сразу несколько ключей из некоторого JSON (используя jq), и я пытаюсь узнать, есть ли лучший способ сделать это, чем называть карту и del каждый раз , Вот мой ввод данных:Удаление нескольких ключей одновременно с помощью jq

test.json

[ 
    { 
    "label": "US : USA : English", 
    "Country": "USA", 
    "region": "US", 
    "Language": "English", 
    "locale": "en", 
    "currency": "USD", 
    "number": "USD" 
    }, 
    { 
    "label": "AU : Australia : English", 
    "Country": "Australia", 
    "region": "AU", 
    "Language": "English", 
    "locale": "en", 
    "currency": "AUD", 
    "number": "AUD" 
    }, 
    { 
    "label": "CA : Canada : English", 
    "Country": "Canada", 
    "region": "CA", 
    "Language": "English", 
    "locale": "en", 
    "currency": "CAD", 
    "number": "CAD" 
    } 
] 

Для каждого элемента, я хочу, чтобы удалить номер, язык и ключи Country. Я могу сделать это с помощью этой команды:

$ cat test.json | jq 'map(del(.Country)) | map(del(.number)) | map(del(.Language))' 

Это прекрасно работает, и я получаю желаемый результат:

[ 
    { 
    "label": "US : USA : English", 
    "region": "US", 
    "locale": "en", 
    "currency": "USD" 
    }, 
    { 
    "label": "AU : Australia : English", 
    "region": "AU", 
    "locale": "en", 
    "currency": "AUD" 
    }, 
    { 
    "label": "CA : Canada : English", 
    "region": "CA", 
    "locale": "en", 
    "currency": "CAD" 
    } 
] 

Однако, я пытаюсь понять, если есть JQ способ задания мультипликатора ярлыки для удаления, поэтому мне не нужно иметь несколько директив map(del())?

Заранее благодарим за любую помощь!

ответ

1

Вы можете предоставить поток путей для удаления:

$ cat test.json | jq 'map(del(.Country, .number, .Language))' 

Кроме того, считают, что, вместо того, чтобы черный список конкретных ключей, вы можете предпочесть белый список те, которые вы хотите:

$ cat test.json | jq 'map({label, region, locale, currency})' 
2

delpaths также стоит знать и, возможно, немного менее таинственным:

map(delpaths([["Country"], ["number"], ["Language"]])) 
+0

'delpaths' определенно менее волшебный, я не слышал об этом. Благодаря! –

Смежные вопросы