हाय मेरे पास नेस्टेड ऑब्जेक्ट के साथ नीचे JSON फ़ाइल है:

{
  "Maps": {
    "Campus": [
      {
        "name": "nus",
        "Building": [
          {
            "name": "sde1",
            "Floor": [
              {
                "name": "floor1"
              },
              {
                "name": "floor2"
              }
            ]
          },
          {
            "name": "sde2"
          }
        ]
      },
      {
        "name": "ntu",
        "Building": [
          {
            "name": "ece1",
            "Floor": [
              {
                "name": "floor1"
              },
              {
                "name": "floor2"
              }
            ]
          },
          {
            "name": "ece2"
          }
        ]
      }
    ]
  }
}

मैं उपरोक्त JSON फ़ाइल को पार्स करने और नीचे दिया गया प्रारूप प्राप्त करने के लिए jq का उपयोग करना चाहता हूं:

nus>sde1>floor1
nus>sde1>floor2
ntu>ece1>floor1
ntu>ece1>floor2

मूल रूप से मुझे Campus Name को Building Name और Floor name के साथ जोड़ना है और बीच में एक < चिन्ह लगाना है।

यदि नेस्टेड ऑब्जेक्ट फ़ील्ड Floor मौजूद नहीं है, तो पार्स को अनदेखा करें और अगले चाइल्ड ऑब्जेक्ट को जारी रखें।

इसे कैसे हासिल करें? धन्यवाद।

0
Xianlin 3 अगस्त 2016, 11:52

2 जवाब

सबसे बढ़िया उत्तर

आप निम्न jq कमांड का उपयोग कर सकते हैं:

jq '.Maps.Campus[]|"\(.name)>\(.Building[]|"\(.name)>\(.Floor[]?.name)")"' file.json

jq .name और .Building[].name के संयोजन को प्रिंट करने के लिए काफी स्मार्ट है क्योंकि .Building एक सरणी है। .Building[].name और Floor[]?.name पर भी यही क्रिया लागू होती है। ? क्योंकि मंजिल हमेशा सेट नहीं होती है।

0
hek2mgl 3 अगस्त 2016, 13:03

यहाँ एक समाधान है जो jq चर का उपयोग करता है

  .Maps.Campus[]
| .name as $campus
| .Building[]
| .name as $bldg
| .Floor[]?
| .name as $floor
| "\($campus)>\($bldg)>\($floor)"
0
jq170727 28 अगस्त 2017, 07:01