Skip to content
Back to Blog
how-to-convert

GeoJSON को JSON में कैसे बदलें (ज्योमेट्री हटाएँ, प्रॉपर्टीज़ रखें)

2026-05-17 8 min read

GeoJSON में असल में क्या होता है (और यह आपकी ज़रूरत से ज़्यादा क्यों है)

GeoJSON सिर्फ़ JSON ही है, लेकिन एक बहुत ही विशिष्ट और अक्सर भारी-भरकम संरचना के साथ। हर फ़ाइल आम तौर पर आपके डेटा को एक `FeatureCollection` में लपेटती है जिसमें `Feature` ऑब्जेक्ट्स की एक ऐरे (array) होती है। हर `Feature` के, बदले में, दो मुख्य भाग होते हैं: `geometry` और `properties`। `geometry` ब्लॉक वह जगह है जहाँ सारा स्थानिक डेटा रहता है—निर्देशांक ऐरे, पॉइंट या पॉलीगॉन जैसे आकार के प्रकार, और जटिल निर्देशांक रिंग जो हज़ारों लाइनों तक चल सकते हैं। `properties` ब्लॉक वह है जिसकी आपको आमतौर पर परवाह होती है: वास्तविक एट्रिब्यूट डेटा जैसे नाम, आईडी, जनसंख्या गणना, या हर आकार से जुड़े टाइमस्टैम्प। वह संरचना एक समस्या बन जाती है जब आपको डेटा को ऐसे सिस्टम में पास करने की आवश्यकता होती है जो 'मैप' की भाषा नहीं बोलता। कल्पना कीजिए कि आपने GIS टूल से सभी 4,200 अमेरिकी काउंटी सीमाओं का एक डेटासेट निर्यात किया है। परिणामी GeoJSON फ़ाइल आसानी से 18 MB की हो सकती है, जिसमें प्रत्येक काउंटी पॉलीगॉन को हज़ारों निर्देशांक जोड़ों द्वारा परिभाषित किया गया है। यदि आपका लक्ष्य केवल एक रिपोर्ट या API में काउंटी का नाम, FIPS कोड और जनसंख्या का उपयोग करना है, तो आप 95% बेकार वज़न ढो रहे हैं। वह ज्योमेट्री सिर्फ़ शोर है। इससे भी बदतर, कुछ पार्सर फ़ाइल को सीधे तौर पर अस्वीकार कर देंगे क्योंकि वे भू-स्थानिक कीज़ (keys) को नहीं पहचानते हैं। इन गैर-स्थानिक उपयोगों के लिए, ज्योमेट्री को हटाना डेटा खोना नहीं है; यह बस स्मार्ट डेटा तैयारी है।

संरचना में अंतर: GeoJSON बनाम सादा JSON

आइए इस बदलाव के बारे में विशिष्ट बनें। यहाँ एक न्यूनतम GeoJSON `Feature` है जिससे आप शुरुआत कर सकते हैं: { "type": "Feature", "geometry": { "type": "Point", "coordinates": [-87.6298, 41.8781] }, "properties": { "city": "Chicago", "population": 2696555, "timezone": "America/Chicago" } } ज्योमेट्री को हटाने के बाद, आपका लक्ष्य `properties` की (key) के अंदर नेस्ट किया गया साफ़, सरल JSON ऑब्जेक्ट है: { "city": "Chicago", "population": 2696555, "timezone": "America/Chicago" } जब आपका इनपुट एक `FeatureCollection` (कई फ़ीचर्स वाली फ़ाइल) हो, तो लक्ष्य एक एकल JSON ऐरे बनाना होता है जिसमें प्रत्येक फ़ीचर से केवल प्रॉपर्टी ऑब्जेक्ट्स हों: [ { "city": "Chicago", "population": 2696555, "timezone": "America/Chicago" }, { "city": "Houston", "population": 2304580, "timezone": "America/Chicago" } ] यह वह प्रारूप है जिसे ज़्यादातर API, स्प्रेडशीट इंपोर्टर और डेटाबेस लोडर समझने के लिए बनाए गए हैं। जिस किसी ने भी किसी विफल API कॉल को डीबग किया है, वह `geometry` या `type` जैसी अप्रत्याशित टॉप-लेवल कीज़ पर पार्सर के अटक जाने की निराशा को जानता है। अंतिम परिणाम एक साफ़ JSON ऐरे है, जो लगभग किसी भी टूल के साथ काम करने के लिए तैयार है। एक महत्वपूर्ण विवरण: क्या होगा यदि किसी फ़ीचर की `properties` के लिए `null` मान हो? यह मान्य GeoJSON है। एक अच्छा कनवर्टर उस फ़ीचर के लिए क्रैश होने या, इससे भी बदतर, चुपचाप उसे छोड़ने के बजाय एक खाली ऑब्जेक्ट `{}` बनाएगा। लापरवाह कन्वर्टर्स इस परीक्षा में हर समय विफल होते हैं।

CocoConvert के साथ GeoJSON को JSON में बदलना

एक तेज़, नो-कोड समाधान के लिए, CocoConvert का GeoJSON-से-JSON कनवर्टर /convert/geojson-to-json पर ठीक इसी काम के लिए डिज़ाइन किया गया है। प्रक्रिया सरल है। आप अपनी `.geojson` या `.json` फ़ाइल अपलोड करते हैं (यह दोनों एक्सटेंशन स्वीकार करता है, क्योंकि GeoJSON अक्सर `.json` का उपयोग करता है), अपने विकल्प चुनें, और छोटा किया गया परिणाम डाउनलोड करें। कनवर्टर डिफ़ॉल्ट रूप से बहुत सख़्त है। यह `features` ऐरे को ढूंढता है, हर एक फ़ीचर से `properties` ऑब्जेक्ट को पकड़ता है, और उन्हें एक साफ़ JSON ऐरे में जोड़ता है। `geometry` की, `type` की, और `FeatureCollection` रैपर सभी पीछे छूट जाते हैं। यदि आपकी फ़ाइल में कलेक्शन के बजाय केवल एक `Feature` है, तो आउटपुट एक एकल JSON ऑब्जेक्ट होगा, न कि एक ऐरे। CocoConvert मुफ़्त टियर पर 50 MB तक की फ़ाइलों को संभालता है, जो 10,000 से कम फ़ीचर्स वाले अधिकांश डेटासेट के लिए पर्याप्त है। लेकिन अगर आपके पास एक विशाल फ़ाइल है जैसे कि एक राज्य-व्यापी सड़क नेटवर्क (जो आसानी से 200 MB या अधिक हो सकती है), तो आपको एक कमांड-लाइन टूल का उपयोग करने की आवश्यकता होगी, जिसे हम आगे कवर करते हैं। गोपनीयता के लिए, कनवर्टर सर्वर पर फ़ाइलों को प्रोसेस करता है लेकिन आपके सत्र के बाद आपका डेटा संग्रहीत नहीं करता है, यह एक महत्वपूर्ण विवरण है यदि आपके एट्रिब्यूट्स में व्यक्तिगत पहचानकर्ताओं जैसी संवेदनशील जानकारी शामिल है। डिफ़ॉल्ट रूप से, डाउनलोड की गई फ़ाइल का एक्सटेंशन `.json` होगा। सेटिंग्स पैनल आपको अधिक नियंत्रण देता है, जिससे आप एक कस्टम फ़ाइल नाम निर्दिष्ट कर सकते हैं या एक मिनिफ़ाइड वन-लाइनर के बजाय इंडेंटेड, मानव-पठनीय आउटपुट प्राप्त कर सकते हैं।

बड़ी फ़ाइलों या ऑटोमेशन के लिए कमांड-लाइन विकल्प

जब आप 50 MB से बड़ी फ़ाइलों से निपट रहे हों या इस रूपांतरण को एक स्क्रिप्ट में स्वचालित करने की आवश्यकता हो, तो कमांड लाइन आपका दोस्त है। आपके पास दो मुख्य हथियार हैं: `jq` और Python का अंतर्निहित `json` मॉड्यूल। शुद्ध JSON परिवर्तन के लिए, गति और सरलता में `jq` को कोई नहीं पछाड़ सकता: jq '[.features[].properties]' input.geojson > output.json यह वन-लाइनर ठीक वही करता है जो वेब टूल करता है: यह प्रत्येक फ़ीचर पर पुनरावृति करता है, `properties` ऑब्जेक्ट को निकालता है, और परिणामों को एक JSON ऐरे में लपेटता है। `jq` किसी भी प्रमुख OS (जैसे macOS पर `brew install jq` या Debian/Ubuntu पर `apt install jq`) पर आसानी से इंस्टॉल हो जाता है और गीगाबाइट-आकार की फ़ाइलों को बिना हिचकिचाए चबा सकता है क्योंकि यह डेटा को मेमोरी में लोड करने के बजाय स्ट्रीम करता है। यदि आपकी फ़ीचर `id` महत्वपूर्ण है (GeoJSON में, यह `properties` के अंदर नहीं, बल्कि उसके साथ रहती है), तो आप इसे मर्ज कर सकते हैं: jq '[.features[] | {id: .id} + .properties]' input.geojson > output.json जब आपको अधिक तर्क की आवश्यकता होती है, तो Python इसका उत्तर है: import json with open('input.geojson') as f: gj = json.load(f) result = [feature['properties'] for feature in gj['features']] with open('output.json', 'w') as f: json.dump(result, f, indent=2) यह छोटी स्क्रिप्ट आपको आउटपुट लिखने से पहले फ़ीचर्स को फ़िल्टर करने, कीज़ का नाम बदलने, या अजीब एज केस को संभालने का पूरा नियंत्रण देती है। सबसे अच्छी बात यह है कि `json` मॉड्यूल Python की मानक लाइब्रेरी का हिस्सा है, इसलिए कुछ भी अतिरिक्त इंस्टॉल करने की आवश्यकता नहीं है। मैं अपनी सिफ़ारिश सीधे-सीधे बताता हूँ: जब आपके पास एक फ़ाइल हो और आप बिना कोड छुए 30 सेकंड में परिणाम चाहते हैं, तो CocoConvert का उपयोग करें। जब आप डेटा पाइपलाइन को स्वचालित कर रहे हों या सैकड़ों फ़ाइलों को प्रोसेस कर रहे हों, तो `jq` या Python का उपयोग करें।

उन मुश्किल मामलों को संभालना जो साधारण कन्वर्टर्स को तोड़ देते हैं

वास्तविक दुनिया का GeoJSON अक्सर विनिर्देश में दिए गए साफ़ उदाहरणों से ज़्यादा गन्दा होता है। यहाँ सामान्य समस्याएँ हैं जो एक साधारण कनवर्टर को तोड़ सकती हैं। **शून्य ज्योमेट्री (Null geometry):** आप अक्सर `"geometry": null` वाले फ़ीचर्स का सामना करेंगे। ये पूरी तरह से मान्य हैं, जो अक्सर उन रिकॉर्ड्स का प्रतिनिधित्व करते हैं जिनमें बस स्थान डेटा की कमी होती है। एक मज़बूत कनवर्टर को अभी भी उनकी प्रॉपर्टीज़ निकालनी चाहिए, न कि पूरे फ़ीचर को छोड़ देना चाहिए। ऊपर दिखाए गए `jq` और Python के तरीके इसे सही ढंग से संभालते हैं। **नेस्टेड प्रॉपर्टीज़ (Nested properties):** `properties` ऑब्जेक्ट में स्वयं नेस्टेड JSON ऑब्जेक्ट हो सकते हैं, जैसे `"properties": {"address": {"street": "Main St"}}`। ज्योमेट्री को हटाने से ये नेस्टेड संरचनाएँ सपाट नहीं होती हैं; वे जैसी हैं वैसी ही संरक्षित रहती हैं। यदि आपको पूरी तरह से सपाट संरचना की आवश्यकता है (उदाहरण के लिए, एक CSV के लिए), तो यह एक अलग परिवर्तन है जिसे आपको करने की आवश्यकता होगी। **असंगत कीज़ (Inconsistent keys):** यह आम है कि एक कलेक्शन में कुछ फ़ीचर्स में `"name"` की हो जबकि दूसरों में नहीं। परिणामी JSON ऐरे में बस अलग-अलग आकार के ऑब्जेक्ट होंगे। यह मान्य JSON है, लेकिन यह स्ट्रॉन्गली-टाइप्ड सिस्टम को उलझा सकता है। CocoConvert ईमानदारी से जो कुछ भी है उसे निकालता है; यह आपके लिए स्कीमा को सामान्य करने का प्रयास नहीं करेगा। **`GeometryCollection`:** कुछ फ़ाइलें `GeometryCollection` प्रकार का उपयोग करती हैं, जिसकी संरचना मानक `FeatureCollection` से भिन्न होती है। CocoConvert सहित कई उपकरण, एक `FeatureCollection` की अपेक्षा करते हैं और यदि उन्हें शीर्ष स्तर पर `GeometryCollection` मिलता है तो वे विफल हो सकते हैं। **एन्कोडिंग समस्याएँ (Encoding problems):** यह GIS डेटा का एक क्लासिक सिरदर्द है। GeoJSON विनिर्देश UTF-8 एन्कोडिंग को अनिवार्य करता है, बस। लेकिन पुराने सॉफ़्टवेयर से निर्यात की गई फ़ाइलों में कभी-कभी Latin-1 या Windows-1252 वर्ण हो सकते हैं। इससे पार्सिंग में त्रुटियाँ होंगी। रूपांतरण का प्रयास करने से पहले आपको `iconv` जैसे टूल का उपयोग करके एन्कोडिंग को अपस्ट्रीम में ठीक करना होगा।

आपको ज्योमेट्री कब रखनी चाहिए (और अलग तरीके से बदलना चाहिए)

जबकि ज्योमेट्री को हटाना केवल-डेटा वर्कफ़्लो के लिए बहुत अच्छा है, कभी-कभी यह बिल्कुल गलत कदम होता है। कई बार आपको स्थानिक डेटा रखने की आवश्यकता होती है, बस एक अलग रूप में। यदि आप Leaflet या MapboxGL जैसी वेब मैपिंग लाइब्रेरी को डेटा दे रहे हैं, तो रुकिए। कुछ भी कन्वर्ट न करें। दोनों लाइब्रेरीज़ GeoJSON को मूल रूप से उपयोग करती हैं, इसलिए सादे JSON में बदलने से वे निर्देशांक ही हट जाएँगे जिनकी उन्हें आपका नक्शा बनाने के लिए आवश्यकता है। कभी-कभी आपको निर्देशांकों की आवश्यकता होती है, बस एक अलग आकार में—जैसे एक कस्टम चार्ट के लिए `{lat, lng, name}` ऑब्जेक्ट्स की एक सपाट ऐरे। यह एक रीशेपिंग कार्य है, न कि ज्योमेट्री स्ट्रिप। `jq` इसके लिए एकदम सही है: jq '[.features[] | {lat: .geometry.coordinates[1], lng: .geometry.coordinates[0], name: .properties.name}]' input.geojson > output.json यहाँ निर्देशांक क्रम पर पूरा ध्यान दें। GeoJSON सख्ती से `[longitude, latitude]`, या (x, y) है। यह उसके विपरीत है जिसकी कई लोग और सिस्टम अपेक्षा करते हैं। इसे गलत करना GeoJSON निर्देशांकों को मैन्युअल रूप से संभालते समय सबसे आम गलती है, और इसका मज़ेदार और निराशाजनक प्रभाव यह होता है कि आपका डेटा गलत गोलार्ध में पहुँच जाता है। यदि आपका लक्ष्य GeoJSON को किसी अन्य भू-स्थानिक प्रारूप जैसे TopoJSON, Shapefile, या KML में बदलना है, तो आपको एक अलग टूल की आवश्यकता है। CocoConvert ये ज्योमेट्री-संरक्षण रूपांतरण नहीं करता है। उसके लिए, आपको कमांड-लाइन पावरहाउस `ogr2ogr` (GDAL से) या उत्कृष्ट Mapshaper वेब टूल जैसे उद्देश्य-निर्मित टूल का उपयोग करना चाहिए। वे उस काम के लिए सही उपकरण हैं। हमारा GeoJSON-से-JSON टूल /convert/geojson-to-json पर एक ही काम पर केंद्रित है: प्रॉपर्टीज़ निकालना। यह उस एक काम को करता है, और अच्छी तरह से करता है।

डाउनस्ट्रीम में उपयोग करने से पहले अपने आउटपुट को मान्य करना

इससे पहले कि आप अपनी चमकदार नई JSON फ़ाइल को किसी डाउनस्ट्रीम सिस्टम में डालें, इसे मान्य करने के लिए दो मिनट का समय लें। यह सरल कदम आपको बाद में घंटों की भ्रमित करने वाली विफलताओं की डीबगिंग से बचा सकता है। फ़ाइल को एक टेक्स्ट एडिटर में खोलें। क्या शीर्ष स्तर एक ऐरे है (यह `[` से शुरू होता है)? क्या प्रत्येक तत्व एक ऑब्जेक्ट है (`{` से शुरू होता है)? गंभीर रूप से, क्या आपको कोई `geometry` या `type` कीज़ दिखाई देती हैं? आपको नहीं दिखनी चाहिए। 'coordinates' स्ट्रिंग के लिए एक त्वरित खोज में शून्य मिलान मिलने चाहिए। अगला, रिकॉर्ड गणना की जाँच करें। यदि आपके इनपुट GeoJSON में 847 फ़ीचर थे, तो आपके आउटपुट JSON ऐरे में ठीक 847 ऑब्जेक्ट होने चाहिए। यदि संख्याएँ मेल नहीं खाती हैं, तो कनवर्टर ने फ़ीचर्स छोड़ दिए हैं, जो संभवतः विकृत इनपुट या शून्य के गलत संचालन के कारण हुआ है। अब, डेटा की स्वयं जाँच करें। अपनी नई JSON में पहले, अंतिम और बीच के एक यादृच्छिक रिकॉर्ड के प्रॉपर्टी मानों की तुलना मूल GeoJSON फ़ाइल से करें। यदि नाम, आईडी और संख्याएँ सभी मेल खाती हैं, तो आप आश्वस्त हो सकते हैं कि रूपांतरण साफ़ था। स्वचालित पाइपलाइनों के लिए, JSONSchema का उपयोग करें। Node.js के लिए `ajv` या Python के लिए `jsonschema` जैसे उपकरण आपको प्रोग्रामेटिक रूप से यह सत्यापित करने की अनुमति देते हैं कि आपकी ऐरे में प्रत्येक ऑब्जेक्ट में वे कीज़ और डेटा प्रकार हैं जिनकी आप अपेक्षा करते हैं। यह किसी भी प्रक्रिया के लिए आवश्यक है जो नियमित रूप से बदलते डेटा पर चलती है। और एक आखिरी बात: यदि डेटा डेटाबेस में जा रहा है, तो इंपोर्ट के बाद टेबल पर एक `COUNT` क्वेरी चलाएँ। क्या पंक्ति गणना आपकी अपेक्षा से मेल खाती है? यह 30-सेकंड की जाँच इस बात की अंतिम पुष्टि है कि पूरी श्रृंखला—रूपांतरण और आयात—पूरी तरह से काम कर गई।

Ready to convert?

Try it now — fast, secure, and private.

Convert Now →
GeoJSON को JSON में कैसे बदलें (ज्योमेट्री हटाएँ, प्रॉपर्टीज़ रखें) | CocoConvert Blog