jq

2015-05-19 7 views
19

में उन चाबियों की कुंजी और मानों द्वारा किसी जेसन फ़ाइल को सॉर्ट करने के लिए कैसे करें हम पेंटाहो सीटूल लाइब्रेरी का उपयोग कर एक वेबसाइट बना रहे हैं, जिसमें एक ग्राफिकल डैशबोर्ड संपादक है जो डैशबोर्ड के हिस्से के लिए JSON- प्रारूप फ़ाइलों को लिखता है।jq

मैं कुंजी द्वारा क्रमबद्ध करने के लिए चेक-इन करने से पहले इन फ़ाइलों में एक ट्रांसफॉर्म लागू करना चाहता हूं और फिर कुछ कुंजी के मूल्य से। इसका उद्देश्य अंतर को आसान बनाना है, क्योंकि संपादक के पास सभी जेसन फ़ील्ड को पुनर्व्यवस्थित करने की आदत है।

उदाहरण के लिए, हम कुछ इस तरह हो सकता है: कुंजी के सभी सुलझाने के लिए

{ 
    "components": { 
    "rows": [ 
     { 
     "id": "CHARTS", 
     "name": "Charts", 
     "parent": "UnIqEiD", 
     "properties": [ 
      { 
      "name": "Group", 
      "type": "Label", 
      "value": "Charts" 
      } 
     ], 
     "type": "Label", 
     "typeDesc": "<i>Group</i>" 
     }, 
     { 
     "id": "kjalajsdjf", 
     "meta_cdwSupport": "true", 
     "parent": "CHARTS", 
     "properties": [ 
      { 
      "name": "name", 
      "type": "Id", 
      "value": "Value1" 
      }, 
      { 
      "name": "title", 
      "type": "String", 
      "value": "Value2" 
      }, 
      { 
      "name": "listeners", 
      "type": "Listeners", 
      "value": "[]" 
      }, 
... 

हम jq --sort-keys (http://stedolan.github.io/jq/) करने में सक्षम हैं, लेकिन मैं कैसे sort_by समारोह का उपयोग करने के पता लगाने के लिए संघर्ष कर रहा हूँ इसलिए, उदाहरण के ऊपर कुछ कुंजी (का मान, उदाहरण के लिए properties.name आधार पर क्रमित करके तो तरह कुछ विशिष्ट तत्वों के लिए। कोई भी विचार?

उत्तर

34

आईआरसी चैनल पर कुछ सहायता के साथ ठीक है, मैं एक जवाब मिल गया है।

असल में, यह इस तरह दिखता है:

> jq '.components.rows|=sort_by(.id)|.components.rows[].properties|=sort_by(.name)' file.json > out.json

तो तुम अगर जरूरत है, और फिर sort_by बस एक ही मूल्य (मैं sort_by(.components.rows.id) जो विफल रही है कोशिश कर रहा था) लेता विन्यास में चल रहा है, है ना वस्तु का चयन करते हैं।

| = के बजाय | उन्हें अलग करने के बजाय मूल्यों को पास करता है।

+0

नोट: किसी भी व्यक्ति के लिए जो वास्तव में CTools '.ddfde' फ़ाइल के साथ ऐसा करना चाहता है, कुंजी को सॉर्ट करना ठीक लगता है, जैसा कि गुण सरणी के अंदर 'name' तत्वों को सॉर्ट करना है, लेकिन' घटक' 'को सॉर्ट करना 'आईडी' द्वारा पंक्तियां एक नो-नो है, यह सामान तोड़ती है। तो ऐसा मत करो ... – karlos

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