Jpe

2016-03-25 9 views
1

ile birden çok anahtarı bir kerede silme Bazı JSON'lardan (jq kullanarak) aynı anda birden çok anahtarı silmem gerekiyor ve bunu her zaman daha harita ve del olarak aramaktan daha iyi bir yol olup olmadığını öğrenmeye çalışıyorum. . İşte benim giriş veri: Her öğe içinJpe

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" 
    } 
] 

, numarayı, Dil ve Ülke anahtarlarını kaldırmak istiyor. Bu komut ile bunu yapabilir:

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

çalışıyor ve ben istenen çıktıyı almak: Ancak

[ 
    { 
    "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" 
    } 
] 

, ben birden belirterek bir jq yolu varsa anlamaya çalışıyorum etiketleri silmek için birden fazla map(del()) direktifine sahip olmak zorunda değilim?

Yardımlarınız için şimdiden teşekkür ederiz!

cevap

1

Silinecek yolları akışını sağlayabilir:

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

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

yerine belirli tuşlara kara listeye, sen istiyorsun olanları beyaz listeye tercih edebilir, düşünün

2

delpaths da bilmeye değer, ve belki de biraz daha az gizemli:

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

'delpaths' kesinlikle daha az büyülü, ben bunu duymamıştım. Teşekkürler! –

İlgili konular