XML থেকে JSON কনভার্টার
বাম দিকে XML পেস্ট করুন, ডান দিকে JSON পান। অ্যাট্রিবিউট @_ প্রিফিক্স দিয়ে সংরক্ষিত। আপনার ব্রাউজারে চলে — কোনো আপলোড নেই।
- বাম টেক্সট এরিয়ায় XML পেস্ট করুন।
- "JSON-এ রূপান্তর" ক্লিক করুন। এলিমেন্ট নেস্টিং নেস্টেড অবজেক্টে পরিণত হয়।
- JSON কপি করুন বা data.json হিসাবে ডাউনলোড করুন।
- পুনরাবৃত্ত চাইল্ড এলিমেন্ট স্বয়ংক্রিয়ভাবে অ্যারেতে গুটিয়ে যায়।
এটি কী করে?
fast-xml-parser প্রথা ব্যবহার করে XML-কে JSON অবজেক্টে পার্স করে: চাইল্ড এলিমেন্ট অবজেক্ট প্রপার্টি হয়, পুনরাবৃত্ত চাইল্ড অ্যারে হয়, অ্যাট্রিবিউট প্যারেন্ট অবজেক্টে `@_` প্রিফিক্স সহ সংরক্ষিত হয়, এবং মিশ্র নোডের টেক্সট কন্টেন্ট `#text` কী-তে আসে। সংখ্যাসূচক ও বুলিয়ান অ্যাট্রিবিউট মান `parseAttributeValue: true` মাধ্যমে স্বয়ংক্রিয়ভাবে টাইপ হয় — XML `count="42"` `"@_count": 42` হিসাবে রাউন্ড-ট্রিপ হয়, স্ট্রিং `"42"` হিসাবে নয়।
উদাহরণ
XML ইনপুট:
<root version="1">
<name>Ada</name>
<tags>math</tags>
<tags>logic</tags>
</root> JSON আউটপুট:
{
"root": {
"@_version": 1,
"name": "Ada",
"tags": ["math", "logic"]
}
} সাধারণ XML ফাঁদ এবং কীভাবে সামলাবেন
XML-এর কোণার কেস আছে যা JSON-এ নেই। এই প্যাটার্নগুলো অপ্রত্যাশিত আউটপুট তৈরি করে।
- একক চাইল্ড বনাম একাধিক চাইল্ড। `<a><b/></a>` `{"a":{"b":""}}` (অবজেক্ট প্রপার্টি হিসাবে একক চাইল্ড) তৈরি করে, কিন্তু `<a><b/><b/></a>` `{"a":{"b":["",""]}}` (অ্যারে হিসাবে একাধিক) তৈরি করে। যদি আপনার ডাউনস্ট্রিম কোড সর্বদা অ্যারে আশা করে, তাহলে রূপান্তরের পর নর্মালাইজ করুন।
- অ্যাট্রিবিউট বনাম চাইল্ড এলিমেন্ট। অ্যাট্রিবিউট চাইল্ডের একই স্তরে `@_` প্রিফিক্সসহ দেখা দেয়। `<user id="1"><name>Ada</name></user>` `{"user":{"@_id":1,"name":"Ada"}}` হয়। কিছু টুল অ্যাট্রিবিউটগুলিকে প্রপার্টিতে মেলায় — সেটি এখানে ব্যবহৃত প্রথা থেকে ভিন্ন।
- মিশ্র সামগ্রী (টেক্সট + চাইল্ড এলিমেন্ট)। `<p>Hello <b>world</b></p>` `{"p":{"#text":"Hello ","b":"world"}}` তৈরি করে। টেক্সট ক্যাপচার হয় কিন্তু চাইল্ডের সাপেক্ষে এর অবস্থান হারিয়ে যায় — JSON-এর ক্রমিক মিশ্র সামগ্রী উপস্থাপনের কোনো উপায় নেই। বেশিরভাগ কনফিগ-স্টাইল XML এই কেসে পড়ে না।
- নেমস্পেস। নেমস্পেস (`<x:foo xmlns:x="...">`) এলিমেন্ট নামের অংশ (`x:foo`) হিসাবে সংরক্ষিত থাকে। অনেক XML কনজিউমার প্রিফিক্স সরিয়ে দেয়; প্রয়োজন হলে পোস্ট-প্রসেসিং ধাপ হিসাবে করুন।
- CDATA সেকশন। `<![CDATA[some text]]>` সাধারণ টেক্সট হিসাবে পার্স হয় এবং তার প্যারেন্টের `#text`-এ যুক্ত হয়। CDATA ফ্রেমিং হারিয়ে যায় — বেশিরভাগ ক্ষেত্রে ঠিক কিন্তু ফ্রেমিং অর্থপূর্ণ ছিল কিনা তা নোট করা মূল্যবান।
- সেলফ-ক্লোজিং বনাম খালি। `<x/>` এবং `<x></x>` XML-এ সমতুল্য এবং একই JSON আউটপুট (`""` মান) তৈরি করে। মূল ফ্রেমিং JSON থেকে পুনরুদ্ধারযোগ্য নয়।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
আমার আউটপুটে অ্যাট্রিবিউটে `@_` প্রিফিক্স কেন?
এটি XML অ্যাট্রিবিউটকে চাইল্ড এলিমেন্ট থেকে আলাদা করে। প্রিফিক্স ছাড়া, `<user id="1"><id>foo</id></user>`-এ দুটি `id` কী থাকবে — একটি JSON অবজেক্টে শুধু একটি থাকতে পারে। প্রিফিক্স উভয়কে রাউন্ড-ট্রিপেবল রাখে। প্রিফিক্স দরকার না হলে পোস্ট-প্রসেসিং ধাপে `"@_"` কে `""` দিয়ে প্রতিস্থাপন করুন (এবং সংঘর্ষের ঝুঁকি গ্রহণ করুন)।
র্যাপিং রুট কী ছাড়াই কি JSON পেতে পারি?
XML-এর সর্বদা একটি একক রুট এলিমেন্ট থাকে। রাউন্ড-ট্রিপেবিলিটির জন্য JSON সেই র্যাপিং রাখে। আপনি যদি ভিতরের অবজেক্ট চান, রূপান্তরের পরে এটি সরান — `result` এর পরিবর্তে `result.root`।
XML মন্তব্য কি সংরক্ষিত হয়?
না। JSON-এ মন্তব্য সিনট্যাক্স নেই, এবং পার্সার XML মন্তব্য উপেক্ষা করতে কনফিগার করা। যদি আপনাকে মন্তব্য সংরক্ষণ করতে হয়, আপনাকে এমন একটি ভিন্ন মধ্যবর্তী উপস্থাপনা ব্যবহার করতে হবে যা সেগুলো সমর্থন করে।
অ্যাট্রিবিউট মান কি টাইপ করা হয়?
হ্যাঁ — `parseAttributeValue: true` সেট আছে, তাই `count="42"` `"@_count": 42` (সংখ্যা) হয় এবং `enabled="true"` `"@_enabled": true` (বুলিয়ান) হয়। যদি আপনার অ্যাট্রিবিউট স্ট্রিং হিসেবে দরকার হয়, পোস্ট-প্রসেস করুন বা কনফিগারেশন ফর্ক করুন।
আমার XML কি আপলোড হয়?
না। সব আপনার ব্রাউজারে চলে — আপনার XML এই পেজের JavaScript দ্বারা পার্স হয় এবং কখনো কোনো সার্ভারে পাঠানো হয় না। ব্রাউজার ডেভেলপার টুলে যাচাই করুন।
এটি কি খুব বড় XML ফাইল সামলাতে পারে?
টেক্সট এরিয়া ধীর হওয়ার আগে প্রায় 30 MB পর্যন্ত। পার্সার রৈখিকভাবে স্কেল করে। বড় ইনপুটের জন্য, কমান্ড লাইনে fast-xml-parser চালান — একই লাইব্রেরি।