Parquet को JSON में बदलें

यहाँ आप Parquet को JSON में बदलते हैं, मुफ़्त और बिना खाते के: फ़ाइल ऊपर छोड़िए और कुछ ही सेकंड में नतीजा डाउनलोड के लिए तैयार मिलेगा। कन्वर्ज़न आपके अपने ब्राउज़र के भीतर होता है, इसलिए फ़ाइल कभी अपलोड नहीं होती। यह Windows, macOS और Linux पर वैसे ही चलता है जैसे iPhone और Android पर, और कनेक्शन काट देने पर भी चलता रहता है।

  • कहाँ चलता है आपके ब्राउज़र में। फ़ाइल कभी अपलोड नहीं होती।
  • बिना नुक़सान कुछ नहीं छोड़ा जाता। Parquet में जो था, JSON में ठीक वही रहता है।
  • फ़ाइल आकार की सीमा हर फ़ाइल 100 MB तक, मुफ़्त, बिना खाते के।

एक बार में 100 फ़ाइलें। फ़ॉर्मेट अलग-अलग हों तो भी चलेगा।

Parquet एक्सट्रैक्ट को JSON फ़ाइल बनना क्यों पड़ता है

Parquet वह है जो कोई डेटा प्लेटफ़ॉर्म देता है और JSON वह है जो बाक़ी सब खाता है। यही फ़र्क़ इस बदलाव की जगह है: टेस्ट के साथ रखा जाने वाला fixture, स्थानीय mock सेवा के लिए seed फ़ाइल, किसी request में पेस्ट करने वाला body, या कुछ पचास पंक्तियाँ जो DuckDB इंस्टॉल किए बिना JSON viewer में देखनी हैं।

ध्यान दीजिए दिलचस्प मामले सब छोटे हैं। Parquet बहुत बड़ी टेबल को सस्ते में क्वेरी करने लायक़ बनाने के लिए है, और इनमें से कुछ भी सफ़र में नहीं बचता — कॉलम-वार बनावट, कंप्रेशन, वे आँकड़े जो reader को पूरे row group छोड़ने देते हैं। जो मिलता है वह टेक्स्ट दस्तावेज़ है, सौ पंक्तियों के लिए सही कलाकृति और दस लाख के लिए ग़लत।

एक ऐरे, प्रति पंक्ति एक ऑब्जेक्ट, दो-स्पेस इंडेंट

Parquet फ़ाइल वापस पंक्तियों में ट्रांसपोज़ होती है, और वे पंक्तियाँ दो-स्पेस इंडेंटेशन और पीछे नई लाइन के साथ शीर्ष-स्तरीय JSON ऐरे बनकर लिखी जाती हैं। कॉलम नाम ऑब्जेक्ट की कुंजी बनते हैं ठीक वैसे जैसे स्कीमा में लिखे थे।

कोई लपेटन नहीं, कोई मेटाडेटा नहीं। अगर गंतव्य को पंक्तियाँ किसी नाम के नीचे चाहिए — `{"rows": […]}` आम शक्ल है — इसे ख़ुद जोड़िए; `jq '{rows: .}'` एक क़दम में कर देता है। ऐरे की लंबाई पंक्ति गिनती है, तो यह जल्दी जाँचने का तरीक़ा भी है कि एक्सट्रैक्ट में वह है जो आपको बताया गया था।

Parquet list या struct कॉलम JSON की एक स्ट्रिंग बनकर आता है

यही इस पेज का असली चौंकाना है और दो बार पढ़ने लायक़ है। Parquet में असली नेस्टेड टाइप हैं — LIST, STRUCT और MAP — और यहाँ का reader उन्हें JavaScript ऑब्जेक्ट के तौर पर वापस देता है, जिन्हें फिर टेक्स्ट में serialise करके फ़ील्ड में स्ट्रिंग के तौर पर रखा जाता है। दो मान रखने वाला `tags` कॉलम नतीजे में `["a","b"]` नहीं बनता।

कुछ भी खोता नहीं और हर चीज़ एक क़दम दूर रह जाती है। `jq '.[0].tags[0]'` त्रुटि देता है कि स्ट्रिंग में इंडेक्स नहीं होते; `jq '.[0].tags | fromjson | .[0]'` सही मान लौटाता है। अगर JSON किसी test fixture में जा रहा है, ईमानदार तरीक़ा है उन कॉलम को `jq 'map(.tags |= fromjson)'` से एक बार खोलकर बनावट वाला संस्करण कमिट करना।

टाइमस्टैम्प Parquet से ISO 8601 टेक्स्ट के तौर पर निकलते हैं

Parquet टाइमस्टैम्प कॉलम एक टाइप्ड पूर्णांक है जिसकी इकाई और टाइम-ज़ोन फ़्लैग फ़ुटर में दर्ज है। JSON के पास कोई तारीख़ टाइप नहीं, तो हर मान ISO 8601 स्ट्रिंग के तौर पर लिखा जाता है — `2026-03-01T08:00:00.000Z` — जो बेशक और सही क्रम में सॉर्ट होता है।

जो जाता है वह है घोषणा। फ़ाइल अब यह नहीं कहती कि कॉलम टाइमस्टैम्प है; यह कहती है कॉलम एक स्ट्रिंग है जो वैसी दिखती है। आगे कुछ भी इसे दोबारा बताना पड़ेगा — कोई `parse_dates` तर्क, कोई स्कीमा, कोई cast। fixture के लिए यह ठीक और साफ़ है।

2^53 से बड़े पहचानकर्ता गोल होने की बजाय quote होकर आते हैं

Parquet में 64-बिट पूर्णांक टाइप है और JavaScript नंबर 53 बिट पूर्णांक सटीकता रखते हैं। चुपचाप गोल करने की बजाय, न समाने वाला मान quote की गई स्ट्रिंग के तौर पर लिखा जाता है; समाने वाला सादे नंबर के तौर पर।

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

Binary कॉलम JSON में हेक्साडेसिमल बन जाते हैं

बिना UTF8 टैग वाला Parquet `BYTE_ARRAY` टेक्स्ट नहीं, बाइट है, और बाइट का JSON में कोई वफ़ादार रूप नहीं। हर ऐसा मान छोटे-अक्षर hex स्ट्रिंग के तौर पर लिखा जाता है — प्रति बाइट दो अक्षर, कोई विभाजक नहीं, कोई प्रीफ़िक्स नहीं।

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

Null JSON में बचता है, जो टेक्स्ट लक्ष्य नहीं संभाल पाते

Parquet में गुम मान JSON में `null` बनता है, ख़ाली स्ट्रिंग से अलग और शून्य से अलग। यह मामूली लगता है जब तक आप इसे delimited लक्ष्यों से न मिलाएँ, जहाँ null और ख़ाली दोनों दो विभाजकों के बीच कुछ नहीं में सिमट जाते हैं।

किसी fixture के लिए यह फ़र्क़ ही पूरी बात है। मान की ग़ैर-मौजूदगी पर परखने वाले टेस्ट को उस ग़ैर-मौजूदगी को दिखा पाना चाहिए, और JSON यहाँ इकलौता टेक्स्ट लक्ष्य है जो इसे दिखाता है।

JSON, Parquet से कितना बड़ा है

काफ़ी, और तीन दिशाओं से एक साथ। Parquet हर कॉलम को उसकी टाइप के साथ एक बार सहेजता है, फिर दोहराई क़ीमतों को dictionary-encode करता है और पन्नों को कंप्रेस करता है; JSON हर पंक्ति पर हर कॉलम नाम दोहराता है, हर संख्या को दशमलव अंक में लिखता है, और यह आउटपुट हर फ़ील्ड को अपनी लाइन पर इंडेंट करता है।

गुणा में ही सोचिए, प्रतिशत में नहीं, और टेबल चौड़ी होने पर और भी ज़्यादा। पूरा दस्तावेज़ सहेजे जाने से पहले मेमोरी में एक स्ट्रिंग के तौर पर बनता है, जो 100 MB मुफ़्त सीमा से बहुत पहले असली सीमा है। पूरे वेयरहाउस टेबल की उम्मीद रखने की बजाय एक्सट्रैक्ट पर `LIMIT` लगाइए।

JSON पर भरोसा करने से पहले Parquet स्कीमा पढ़ें

जो फ़ुटर फ़ाइल को ख़ुद-बताने वाली बनाता था वह पार नहीं आता। कॉलम नाम कुंजी के तौर पर बचते हैं और बाक़ी कुछ नहीं: न घोषित टाइप, न nullability, न कंप्रेशन, न row-group आँकड़े, न कोई कुंजी-मान मेटाडेटा।

अगर आपके पास DuckDB है, `DESCRIBE SELECT * FROM 'file.parquet'` एक लाइन के shell में स्कीमा दिखाता है और दस सेकंड लेता है। नहीं है तो मुट्ठी भर पंक्तियाँ पहले बदलकर पढ़िए — quote किए पूर्णांक, ISO स्ट्रिंग और escape की गई नेस्टेड कॉलम हर एक स्रोत टाइप बताते हैं।

Parquet फ़ाइल कहाँ डिकोड होती है

इसी टैब में। सादी JavaScript में लिखा Parquet reader इनमें से किसी जोड़ी का पहली बार इस्तेमाल करते ही लाया जाता है और फिर स्थानीय तौर पर काम करता है; फ़ाइल कभी कहीं नहीं भेजी जाती, और नेटवर्क टैब बदलाव के दौरान reader आते और कुछ न जाते दिखाता है।

यह फ़र्क़ इस फ़ॉर्मेट के लिए ज़्यादातर से ज़्यादा मायने रखता है, क्योंकि Parquet एक वेयरहाउस कलाकृति है। इस एक्सटेंशन वाली फ़ाइलें उत्पादन टेबल के एक्सट्रैक्ट हैं — ग्राहक, ऑर्डर, इवेंट, तनख़्वाह — और वे किसी डेटा टीम से आती हैं जिसे अपलोड की रिपोर्ट करनी पड़ती।

Parquet को JSON में ऐसे बदलें

  1. अपनी Parquet फ़ाइल इस पेज पर छोड़ें, या चुनने के लिए दबाएँ।
  2. लक्ष्य के रूप में JSON चुनें। कन्वर्ज़न आपके ब्राउज़र में होता है और फ़ाइल अपलोड नहीं होती।
  3. तैयार JSON फ़ाइल डाउनलोड कर लें।

Parquet या JSON: क्या बदलता है

Parquet और JSON की तुलना
ParquetJSON
पूरा नामApache ParquetJavaScript Object Notation
फ़ाइल एक्सटेंशन.parquet.json
मीडिया टाइपapplication/vnd.apache.parquetapplication/json
कंप्रेशनबिना नुक़सान — कुछ छोड़ा नहीं जाता
पहली बार प्रकाशित20132001
प्रकाशकApache Software Foundation
विनिर्देशRFC 8259
लाइसेंसखुला मानकखुला मानक
आज की स्थितिमौजूदामौजूदा
ब्राउज़र में खुलता हैकोई ब्राउज़र नहींहर ब्राउज़र
इसकी जगह विचारणीयCSVXML, YAML, NDJSON

क्या बचा रहता है

कुछ नहीं खोता। Parquet और JSON — दोनों अपनी सामग्री बिना नुक़सान सँभालते हैं: यह कन्वर्ज़न पैकिंग बदलता है, गुणवत्ता नहीं, और आप इसे दोहरा सकते हैं बिना इस डर के कि नुक़सान जमा होता जाएगा।

लक्ष्य फ़ॉर्मेट क्या और सँभाल सकता है

JSON काम करने का फ़ॉर्मेट है और Parquet बनकर तैयार फ़ॉर्मेट। जो लौटता है वह पन्ने की तस्वीर नहीं बल्कि बदली जा सकने वाली लिखावट है — आम तौर पर यही इस कन्वर्ज़न की वजह होती है, और यही इसकी सीमा भी।

नतीजा खोलना

JSON को हर मौजूदा ब्राउज़र खोल लेता है। Parquet को इतने भी नहीं। अगर फ़ाइल किसी वेब पेज या किसी फ़ॉर्म तक जा रही है, तो आम तौर पर इस कन्वर्ज़न की पूरी वजह यही है।

दोनों तरफ़ के प्रोग्राम अलग हैं: Parquet फ़ाइल pandas, Apache Spark और DuckDB में खुलती है और JSON फ़ाइल Visual Studio Code, jq और Postman में — यानी नतीजा जिसके पास जाएगा, उसे दूसरी सूची में से कोई प्रोग्राम चाहिए होगा।

कौन-सा फ़ॉर्मेट किस काम के लिए है

JSON 2001 से चला आ रहा है, और RFC 8259 में तय किया गया है। Visual Studio Code, jq और Postman इस फ़ॉर्मेट को पढ़ लेते है।

Parquet से JSON: आम सवाल

क्या मेरी Parquet फ़ाइल कहीं अपलोड होती है?

नहीं। यह कन्वर्ज़न पूरी तरह आपके ब्राउज़र में होता है, इसलिए फ़ाइल आपके डिवाइस से बाहर नहीं जाती। आप ख़ुद जाँच सकते हैं: डेवलपर टूल्स का नेटवर्क टैब खोलिए और कुछ बदल कर देखिए। आपको पेज ख़ुद दिखेगा और आँकड़ों तथा विज्ञापन के वे अनुरोध दिखेंगे जिनसे इस सेवा का ख़र्च निकलता है — और एक भी ऐसा अनुरोध नहीं जो आपकी फ़ाइल साथ ले जा रहा हो। इस जोड़ी के पीछे parquet-wasm है, Apache Arrow के पाठक का एक WebAssembly संस्करण; आपका ब्राउज़र इसे एक बार उतारता है और फिर सहेज कर रखता है।

क्या Parquet को JSON में बदलना मुफ़्त है?

हाँ। न खाता, न वॉटरमार्क, और न कोई रोज़ का कोटा जो ख़त्म हो: यह आपकी अपनी मशीन पर चलता है, इसलिए आप जितनी बार चाहें लौट सकते हैं। ब्राउज़र 100 MB तक की फ़ाइलें सँभालता है, एक बार में 100। parquet-wasm आपकी अपनी मशीन पर उतरता है और वहीं चलता है — इसीलिए उस पर कोई गिनती नहीं है।

Parquet को JSON में बदलने पर क्या गुणवत्ता जाती है?

नहीं। JSON वही सामग्री बिना कुछ फेंके सँभालता है: नतीजा गुणवत्ता में असली फ़ाइल जैसा ही होता है।

क्या Parquet से JSON बिना नुक़सान का है?

कुछ नहीं खोता। Parquet और JSON — दोनों अपनी सामग्री बिना नुक़सान सँभालते हैं: यह कन्वर्ज़न पैकिंग बदलता है, गुणवत्ता नहीं, और आप इसे दोहरा सकते हैं बिना इस डर के कि नुक़सान जमा होता जाएगा।

क्या JSON फ़ाइल उसके बाद बदली जा सकती है?

JSON काम करने का फ़ॉर्मेट है और Parquet बनकर तैयार फ़ॉर्मेट। जो लौटता है वह पन्ने की तस्वीर नहीं बल्कि बदली जा सकने वाली लिखावट है — आम तौर पर यही इस कन्वर्ज़न की वजह होती है, और यही इसकी सीमा भी।

इन फ़ॉर्मेट के बारे में और