हाय मेरे पास नेस्टेड ऑब्जेक्ट के साथ नीचे 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
मौजूद नहीं है, तो पार्स को अनदेखा करें और अगले चाइल्ड ऑब्जेक्ट को जारी रखें।
इसे कैसे हासिल करें? धन्यवाद।
2 जवाब
आप निम्न jq
कमांड का उपयोग कर सकते हैं:
jq '.Maps.Campus[]|"\(.name)>\(.Building[]|"\(.name)>\(.Floor[]?.name)")"' file.json
jq
.name
और .Building[].name
के संयोजन को प्रिंट करने के लिए काफी स्मार्ट है क्योंकि .Building
एक सरणी है। .Building[].name
और Floor[]?.name
पर भी यही क्रिया लागू होती है। ?
क्योंकि मंजिल हमेशा सेट नहीं होती है।
यहाँ एक समाधान है जो jq चर का उपयोग करता है
.Maps.Campus[]
| .name as $campus
| .Building[]
| .name as $bldg
| .Floor[]?
| .name as $floor
| "\($campus)>\($bldg)>\($floor)"
संबंधित सवाल
नए सवाल
json
JSON (जावास्क्रिप्ट ऑब्जेक्ट नोटेशन) मशीन और मानव पठनीय होने के लिए एक क्रमबद्ध डेटा इंटरचेंज प्रारूप है। इस टैग का उपयोग देशी जावास्क्रिप्ट वस्तुओं या जावास्क्रिप्ट ऑब्जेक्ट शाब्दिकों के लिए न करें। इससे पहले कि आप कोई प्रश्न पूछें, एक JSON सत्यापनकर्ता जैसे JSONLint (https://jsonlint.com) का उपयोग करके अपने JSON को मान्य करें।