JSON ফরম্যাটার
JSON বিউটিফাই, মিনিফাই এবং ভ্যালিডেট করুন - এবং এটি পার্স না হলে, ঠিক কোথায় সমস্যা তা জানুন।
ইনপুট
0টি অক্ষরআউটপুট
JSON বিউটিফাই, মিনিফাই এবং ভ্যালিডেট করুন - এবং এটি পার্স না হলে, ঠিক কোথায় সমস্যা তা জানুন।
কোনো API লগ বা কনফিগারেশন ফাইল থেকে আসা JSON সাধারণত একটি দীর্ঘ লাইন হয়, এবং যে JSON পার্স হয় না তা সাধারণত এমন কোথাও ব্যর্থ হয় যা আপনি দেখতে পান না। এটি এটিকে ইনডেন্ট করে যাতে আপনি পড়তে পারেন, প্রয়োজনে ছোট করার জন্য মিনিফাই করে, এবং যখন এটি ভাঙা থাকে তখন লাইন ও কলাম বলে দেয় এবং সেই লাইন দেখায়।
বেশিরভাগ সময় আপনি এখানে JSON কে সুন্দর করতে আসেননি - আপনি এখানে এসেছেন কারণ কিছু একটা এটি প্রত্যাখ্যান করেছে এবং কেন তা বলেনি। পার্সার লাইন, কলাম এবং কী প্রত্যাশা করেছিল তা জানায়, এবং টুলটি সেই লাইনটি তার চারপাশের দুটি লাইনসহ প্রিন্ট করে। একটি কনফিগারেশনের চারশো লাইনের মধ্যে একটি অনুপস্থিত কমা, একবার আপনি জানলে এটি কোথায়, ত্রিশ সেকেন্ডের সমাধান।
JSON কখনোই এই দুটির কোনোটিরই অনুমতি দেয়নি, কিন্তু মানুষ আপনাকে যে ফাইলগুলো আসলে দেয় - tsconfig, VS Code সেটিংস, হাতে সম্পাদিত যেকোনো কিছু - এগুলোতে ভরা। অপশনটি টিক দিলে পার্স করার আগে এগুলো সরিয়ে দেয়, এবং তারপর টুলটি বলে দেয় কতগুলো কমেন্ট ও কতগুলো কমা এটি সরিয়েছে। এটি ঐচ্ছিক এবং নির্ভুলভাবে জানানো হয় কারণ একটি ফরম্যাটার যা নিঃশব্দে আপনার নথি পরিবর্তন করে তা প্রত্যাখ্যান করা ফরম্যাটারের চেয়ে খারাপ।
এটি অনুমান করে না আপনি কী বোঝাতে চেয়েছেন। উপরের দুটি অপসারণ ছাড়া, কিছুই মেরামত করা হয় না: একটি অসমাপ্ত ব্রেস, একক-উদ্ধৃতির কী বা উদ্ধৃতিহীন কী রিপোর্ট করা হয়, পুনর্লিখন করা হয় না। কী সাজানো এবং পুনরায় ইনডেন্ট করা কখনো কোনো অ্যারের ক্রম বা কোনো স্ট্রিং বদলায় না। পরের অংশে সেই অল্প কয়েকটি ক্ষেত্র দেওয়া আছে যেখানে আউটপুট তবুও আপনার পেস্ট করা লেখা থেকে আলাদা হতে পারে।
আপনার JSON পার্স করে আবার লেখা হয়, তাই কিছু জিনিস মানক রূপে ফেরে। সংখ্যাগুলো নতুন করে লেখা হয়: 1.50 হয় 1.5, 1E3 হয় 1000.0 এবং -0 হয় 0, আর 64-বিট float যত অঙ্ক ধরতে পারে তার চেয়ে বেশি অঙ্কের দশমিক সংখ্যা রাউন্ড করা হয় (0.1000000000000000055 হয় 0.1)। পূর্ণসংখ্যা 4,300 অঙ্ক পর্যন্ত হুবহু থাকে (এর চেয়ে লম্বা হলে প্রত্যাখ্যাত হয়)। কোনো অবজেক্টে একটি কী পুনরাবৃত্ত হলে কেবল শেষ মানটি থাকে, কোনো সতর্কতা ছাড়াই। NaN, Infinity এবং -Infinity গ্রহণ করা হয় এবং যেমন আছে তেমন থাকে, যদিও মানক JSON (RFC 8259) এগুলোর অনুমতি দেয় না, আর float-এর জন্য খুব বড় সংখ্যা, যেমন 1e400, Infinity হিসেবে বেরোয়। এর কোনোটি যদি আপনি যে সিস্টেমে ডেটা দিচ্ছেন তার জন্য গুরুত্বপূর্ণ হয়, তবে ত্রুটিহীন ফলাফলে ভরসা করার আগে নিজে যাচাই করুন।
এটি পার্স করার জন্য সার্ভারে পাঠানো হয় এবং একই প্রতিক্রিয়ায় সরাসরি ফেরত পাঠানো হয়। ডিস্কে কিছু লেখা হয় না, ক্যাশে করা হয় না বা লগ করা হয় না, এবং ব্যবহারের রেকর্ড শুধু সংখ্যা রাখে - আকার, নেস্টিং গভীরতা, বেছে নেওয়া মোড - কখনও নথি নয়।
সাধারণত কমেন্ট, শেষের কমা, একক উদ্ধৃতি বা উদ্ধৃতিহীন কী - এসব কনফিগারেশন ফাইলে সাধারণ এবং এগুলোর কোনোটিই বৈধ JSON নয়। প্রথম দুটির জন্য "কমেন্ট ও শেষের কমা অনুমতি দিন" টিক দিন; বাকিগুলো সত্যিকারের অবৈধ এবং ঠিক করতে হবে।
প্রতি অনুরোধে 2,000,000 অক্ষর পর্যন্ত; এর চেয়ে লম্বা লেখা তার সঠিক দৈর্ঘ্য জানিয়ে প্রত্যাখ্যান করা হয়। সেই আকারের ফাইলের জন্য jq-এর মতো একটি কমান্ড-লাইন টুল ভালো যন্ত্র।
লগ পাইপলাইন ও স্ট্রিমিং লোডার একটি বড় অ্যারের পরিবর্তে প্রতি লাইনে একটি JSON অবজেক্ট পড়ে। এটি বেছে নিন এবং একটি টপ-লেভেল অ্যারে প্রতি লাইনে একটি কমপ্যাক্ট রেকর্ড হিসেবে ফিরে আসে।
না। অবজেক্টের কী-এর ক্রম JSON-এ অর্থবহ নয়, এবং অ্যারের ক্রম - যা অর্থবহ - কখনও স্পর্শ করা হয় না। সাজানো আছে যাতে একই নথির দুটি সংস্করণ শব্দ ছাড়াই তুলনা করা যায়।
Microsoft 365-এর Excel-এ এটি .json ফাইল হিসেবে সেভ করুন এবং Data > Get Data > From File > From JSON বেছে নিন। Power Query এটি খোলে: সবচেয়ে উপরের স্তরের array একটি List হিসেবে দেখা যায়, To Table সেটিকে Records-এর একটি কলামে বদলায়, আর কলাম হেডারের expand বোতাম (দুটি তীর) প্রতিটি key-কে আলাদা কলামে ছড়িয়ে দেয়; nested array expand করলে প্রতিটি আইটেমের জন্য একটি সারি যোগ হয়। Power Query-র একটিই বৈধ JSON নথি দরকার, তাই আগে এখানেই ভুলগুলো ঠিক করুন, যেখানে সারি ও কলাম দেখানো হয়, তারপর সুন্দর করুন বা মিনিফাই করুন-এর আউটপুট সেভ করুন; JSON Lines আউটপুট লগ টুলের জন্য। এই টুল নিজে JSON-কে CSV বা Excel-এ রূপান্তর করে না।
Python-এ একটি যাচাইকারী আগে থেকেই আছে: python -m json.tool data.json ডকুমেন্টটি ৪ স্পেস ইনডেন্টে দেখায়, অথবা Expecting ',' delimiter: line 3 column 3 এর মতো বার্তা দিয়ে থেমে যায়। jq ইনস্টল থাকলে jq . data.json ফরম্যাট করে, আর jq empty data.json শুধু যাচাই করে এবং ফাইল ঠিক থাকলে কিছুই দেখায় না। দুটির কোনোটিই কমেন্ট বা ট্রেইলিং কমা গ্রহণ করে না, তাই এগুলো থাকা কনফিগ ফাইল সেখানে ব্যর্থ হয়; ফাইলটি এখানে পেস্ট করুন এবং কী সরানো হলো দেখতে "কমেন্ট ও ট্রেইলিং কমা এর অনুমতি দিন" চালু করুন।
পার্সার একটি অবজেক্টের key আশা করছিল, কিন্তু অন্য কিছু পেয়েছে। সাধারণত key-গুলো single quote-এ থাকে বা কোনো quote থাকে না, যেমন Python বা JavaScript থেকে কপি করা {'name': 'Asha'}, যা লাইন ১, কলাম ২-এ থেমে যায়: JSON-এ প্রতিটি key আর string-এর চারপাশে double quote লাগে, আর এই টুল কখনো quote বদলায় না, তাই নিজে ঠিক করুন। একই বার্তা কোনো বন্ধ brace-এ এলে, যেমন {"a": 1,}-এ, কারণটি একটি ট্রেইলিং কমা; সরাতে "কমেন্ট ও ট্রেইলিং কমা এর অনুমতি দিন" চালু করুন। True, False বা None-এ Expecting value মানে Python-এর মান: JSON-এ true, false আর null ছোট হাতের অক্ষরে লেখা হয়। Python-এ json.dumps(data) বৈধ JSON দেয়, print(data) দেয় না। ত্রুটিগুলো Python-এর পার্সার যেভাবে লেখে ঠিক সেভাবেই, ইংরেজিতে দেখানো হয়, যাতে আপনি বার্তাটি হুবহু সার্চ করতে পারেন।
পার্সার একটি সম্পূর্ণ JSON মান পড়ার পর আরও লেখা পেয়েছে। সাধারণ কারণ: প্রতি লাইনে একটি অবজেক্ট থাকা JSON Lines (NDJSON) লগ, যা লাইন ২, কলাম ১-এ থামে; পরপর পেস্ট করা দুটি ডকুমেন্ট; অথবা শেষ বন্ধ brace-এর পরে একটি // কমেন্ট, যা "কমেন্ট ও ট্রেইলিং কমা এর অনুমতি দিন" সরিয়ে দেয়। এই টুল একবারে একটি ডকুমেন্ট যাচাই করে, তাই একটি রেকর্ড পেস্ট করুন, অথবা রেকর্ডগুলো কমা দিয়ে আলাদা করে [ ]-এর ভেতরে রাখুন; এরপর JSON Lines বেছে নিলে সেগুলো আবার প্রতি লাইনে একটি করে লেখা হয়।