2017-01-10 13 views
6

Bir alt özelliğin değerine bağlı olarak jmespath nesnesindeki bir nesnenin özelliklerini filtrelemeye çalışıyorum ve yalnızca alt özelliğin belirli bir değere ayarlandığı özellikleri eklemek istiyorum. Bu örnek verilere dayanarakNesneye göre filtre nesnesini ve jmespath anahtarıyla seçin

:

{ 
    "a": { 
    "feature": { 
     "enabled": true, 
    } 
    }, 
    "b": { 
    }, 
    "c": { 
    "feature": { 
     "enabled": false 
    } 
    } 
} 

Ben özelliği etkin tüm özelliklere sahip bir nesne almak istiyorum.

{ 
    "a": { 
    "feature": { 
     "enabled": true, 
    } 
    } 
} 

ben property. enabled true olarak ayarlanır nesneleri filtrelemek için bu jmespath sorgusu diye düşündüm. Unfortunateley, işe yaramaz gibi gözüküyor ve boş bir dizi döndürüyor.

*[?feature.enabled==`true`] 

*.feature.enabled veya herhangi bir kaynak gösterilmeksizin *[feature.enabled] dönüş sadece boolean değerleri. *[?feature.enabled== gerçek ] çalışacak bile

, sadece mülkiyet değerleri dizisi olurdu, ama Anahtarları (a ve c) lutfen gerekir. Bunun jmespath'ta gerçekleşmesinin bir yolu var mı?

Bu, tüm olası bir oyun kitabının bir parçası, bu yüzden seçim kesinlikle farklı bir şekilde (Jinja2 şablonları veya özel eklenti) elde etmek için bir yol olurdu ama jmespath denemek istedim ve mantıklı olurdu, böyle bir görev.

+0

Herhangi bir şeyi sorgulamaktan başka, iç içe geçmiş verilere göre belirli anahtarları silmek istiyorsunuz. [Perl için bu soru] gibi bir şey (http://stackoverflow.com/q/18660309/2947502). Ben de JMESPath ile yapıp yapamayacağınızı bilmek istiyorum. – techraf

cevap

3

Üzgünüm, fakat AFAIK bu, yerli JMESPath'ta mümkün değildir.
jq'da to_entries gibi farklı araçlarda bu amaç için özel yerleşik işlevler vardır.
jmespath.py için ve bu nedenle Ansible için tuşların işlenmesini uygulamak üzere pull request askıda kalıyor.

Güncelleme:json_query filtresinin yamalı bir versiyonunu yaptım.
Ek bilgi için bkz. this.

+0

Teşekkürler, bu çekme isteğini takip ediyorum ve şu anda, eşleşen sözlük öğelerini seçmek ve bunları yeni bir dict'e koymak için jinja2 döngüsü ile bu sorunu çözdüm. –

+0

[Sorunum] (/ soru/46306363 /) bu PR birleştirilene kadar nasıl çözülmez? Teşekkürler! –

İlgili konular