2014-04-24 7 views
10

मुझे कई स्तरों के साथ एक मनमाने ढंग से संरचना मिली है। मुझे उन सभी ऑब्जेक्ट्स को चुनने की आवश्यकता है जिनमें updateDate नाम की कुंजी शामिल है। मैं jq के साथ ऐसा कैसे करूं? मैं एक ही रास्ता के साथ आया था लेकिन जब यह एक पत्ता जो मैं बाहर grep करने के लिए है का दौरा यह भी अमान्य डेटा प्रकार पर त्रुटियों का उत्पादन:jq - दिए गए कुंजी नाम के साथ ऑब्जेक्ट्स का चयन करें

jq 'recurse(.[]) | has("updateDate")' | grep -Fv error 

मैं सच में समझ में नहीं आता भी प्रकार या पत्तियों और मैं के लिए जाँच करने के लिए कैसे संदेह है कि मैं जो चाहता हूं उसे हासिल करने का एक आसान तरीका है?

उत्तर

14

1.4 में आप कर सकते हैं बस:

jq 'recurse(if type == "array" or type = "object" then .[] else empty end) | if type == "object" then .updateDate else empty end' 
+0

संरचना में सरणी शामिल होने पर यह त्रुटि होगी। मध्य में '| ऑब्जेक्ट्स |' जोड़ना इसे ठीक करता है, मुझे लगता है। – Tgr

1

जांची नहीं: कैसे के बारे में jq 'recurse(.[]?) | objects | has("updateDate")'

jq '..|.updateDate?' 

आप 1.3 के साथ फंस रहे हैं तुम इतनी तरह एक लंबे समय तक प्रोग्राम का उपयोग कर सकते हैं?

+1

रिकर्स (। []?) | वस्तुओं | का चयन करें (है ("एक")) –

संबंधित मुद्दे