TOML (Tom's Obvious Minimal Language) হলো মানুষের জন্য ডিজাইন করা একটি কনফিগারেশন ফাইল ফরম্যাট। এটি স্পষ্টভাবে একটি হ্যাশ টেবিলে ম্যাপ করে, নেস্টেড টেবিল, টাইপড মান এবং ইনলাইন কমেন্ট সমর্থন করে। অনেক টুল ও ফ্রেমওয়ার্ক TOML-কে প্রাথমিক কনফিগ ফরম্যাট হিসেবে ব্যবহার করে: Rust প্রকল্পগুলো Cargo.toml-এর উপর নির্ভর করে, Python প্যাকেজিং pyproject.toml ব্যবহার করে এবং Hugo স্ট্যাটিক সাইটগুলো config.toml-এর মাধ্যমে কনফিগার করা হয়। অনলাইনে TOML থেকে JSON-এ রূপান্তর করলে এই কনফিগারেশন ফাইলগুলোকে এমন একটি ফরম্যাটে রূপান্তর করা যায় যা প্রায় প্রতিটি প্রোগ্রামিং ভাষা, API এবং ডেটা পাইপলাইন সরাসরি ব্যবহার করতে পারে।
JSON (JavaScript Object Notation) — যা RFC 8259 দ্বারা সংজ্ঞায়িত — হলো সবচেয়ে ব্যাপকভাবে সমর্থিত ডেটা ইন্টারচেঞ্জ ফরম্যাট। TOML তার ন্যূনতম সিনট্যাক্স ও কমেন্ট সমর্থনের মাধ্যমে মানব-পাঠযোগ্যতাকে অগ্রাধিকার দেয়, আর JSON মেশিন ইন্টারঅপারেবিলিটিকে অগ্রাধিকার দেয়। একটি TOML থেকে JSON কনভার্টার TOML v1.0.0 স্পেসিফিকেশন অনুযায়ী TOML ইনপুট পার্স করে এবং কাঠামোগতভাবে সমতুল্য একটি JSON ডকুমেন্ট তৈরি করে এই ব্যবধান পূরণ করে। রূপান্তরটি সমস্ত ডেটা সংরক্ষণ করে: স্ট্রিং, ইন্টিজার, ফ্লোট, বুলিয়ান, অ্যারে এবং টেবিল সরাসরি তাদের JSON সমতুল্যে ম্যাপ হয়।
TOML-এর চারটি নেটিভ তারিখ/সময় টাইপ আছে যা JSON সরাসরি উপস্থাপন করতে পারে না: অফসেট ডেট-টাইম, লোকাল ডেট-টাইম, লোকাল ডেট এবং লোকাল টাইম। JSON-এ কোনো ডেট টাইপ নেই, তাই রূপান্তরের সময় এই মানগুলো ISO 8601 স্ট্রিং হিসেবে সিরিয়ালাইজ করা হয়।
কেন TOML থেকে JSON কনভার্টার ব্যবহার করবেন?
TOML-এ লেখা কনফিগারেশন ফাইলগুলো প্রায়ই এমন সিস্টেমে ফিড করতে হয় যা শুধুমাত্র JSON গ্রহণ করে। হাতে ফাইল পুনরায় লেখা বা লোকালি একটি পার্সার লাইব্রেরি ইনস্টল করার পরিবর্তে, একটি ব্রাউজার-ভিত্তিক কনভার্টার মাত্র সেকেন্ডে রূপান্তর সম্পন্ন করে।
🔒
গোপনীয়তা-প্রথম প্রক্রিয়াকরণ
আপনার TOML ডেটা সম্পূর্ণরূপে ব্রাউজারে পার্স ও রূপান্তরিত হয়। কোনো কিছু সার্ভারে আপলোড হয় না, তাই API কী, ডেটাবেস ক্রেডেনশিয়াল বা ইন্টার্নাল হোস্টনেম সম্বলিত কনফিগারেশন ফাইল রূপান্তর করা নিরাপদ।
⚡
তাৎক্ষণিক রূপান্তর
আপনার TOML পেস্ট করুন এবং সঙ্গে সঙ্গে ফরম্যাট করা JSON আউটপুট পান। একটি এককালীন ফরম্যাট রূপান্তরের জন্য Node.js প্যাকেজ, Python লাইব্রেরি বা CLI টুল ইনস্টল করার প্রয়োজন নেই।
🔀
সম্পূর্ণ TOML v1.0.0 সমর্থন
কনভার্টারটি সমস্ত TOML ডেটা টাইপ পরিচালনা করে, যার মধ্যে ডটেড কী, ইনলাইন টেবিল, অ্যারে অব টেবিল, মাল্টি-লাইন স্ট্রিং এবং ডেট-টাইম মান রয়েছে। ম্যানুয়াল রূপান্তরে যে এজ কেসগুলো সমস্যা তৈরি করে তা সঠিকভাবে পরিচালনা করা হয়।
📋
কোনো অ্যাকাউন্ট প্রয়োজন নেই
পেজ খুলুন, আপনার TOML পেস্ট করুন এবং JSON ফলাফল কপি করুন। কোনো সাইন-আপ নেই, কোনো রেট লিমিট নেই এবং কোনো ব্যবহার ট্র্যাকিং নেই। প্রতিবার ভিজিট করলে টুলটি একইভাবে কাজ করে।
TOML থেকে JSON ব্যবহারের ক্ষেত্র
ফ্রন্টএন্ড ডেভেলপমেন্ট
একটি Rust WASM প্রকল্পের Cargo.toml মেটাডেটা JSON-এ রূপান্তর করুন একটি JavaScript বিল্ড স্ক্রিপ্ট বা package.json জেনারেশন স্টেপে ব্যবহারের জন্য।
ব্যাকএন্ড ইঞ্জিনিয়ারিং
TOML-এ লেখা অ্যাপ্লিকেশন কনফিগ JSON-এ রূপান্তর করুন এমন পরিবেশে ইনজেক্ট করার জন্য যেগুলোতে JSON কনফিগ প্রয়োজন হয়, যেমন AWS Lambda পরিবেশ ভেরিয়েবল বা Docker কন্টেইনার লেবেল।
DevOps ও CI/CD
GitHub Actions এবং GitLab CI-এর মতো পাইপলাইন টুলগুলো প্রায়ই JSON ইনপুট নিয়ে কাজ করে। TOML-ভিত্তিক টুল কনফিগারেশন (rustfmt.toml, taplo.toml) JSON-এ রূপান্তর করুন লিন্টিং বা ভ্যালিডেশন স্টেপের জন্য।
QA ও টেস্টিং
TOML সোর্স ফাইল থেকে JSON টেস্ট ফিক্সচার তৈরি করুন। TOML তার কমেন্ট সমর্থন ও পাঠযোগ্য সিনট্যাক্সের কারণে টেস্ট ডেটা সোর্স হিসেবে বজায় রাখা সহজ, কিন্তু টেস্ট হার্নেসগুলো প্রায়ই JSON ইনপুট আশা করে।
ডেটা ইঞ্জিনিয়ারিং
সিস্টেমের মধ্যে কনফিগারেশন মাইগ্রেট করার সময়, এক প্ল্যাটফর্মের (যেমন InfluxDB, Telegraf) TOML ফাইলগুলোকে অন্য প্ল্যাটফর্মের API বা ইম্পোর্ট টুলের জন্য JSON ডকুমেন্টে পরিণত করতে হতে পারে।
শেখা ও শিক্ষা
ডেটা ফরম্যাট শেখা শিক্ষার্থীরা TOML উদাহরণ পেস্ট করে দেখতে পারবেন কীভাবে টেবিল নেস্টেড অবজেক্টে পরিণত হয়, কীভাবে অ্যারে অব টেবিল JSON অ্যারে হয়, এবং কীভাবে TOML-এর ডেট টাইপগুলো স্ট্রিংয়ে ম্যাপ হয়।
TOML থেকে JSON টাইপ ম্যাপিং রেফারেন্স
প্রতিটি TOML টাইপের একটি সরাসরি JSON সমতুল্য আছে, একটি ব্যতিক্রম বাদে: তারিখ ও সময়ের মান। নিচের টেবিলটি দেখায় প্রতিটি TOML টাইপ কীভাবে JSON-এ রূপান্তরিত হয়। এই ম্যাপিং TOML v1.0.0 স্পেসিফিকেশন অনুসরণ করে এবং tomllib (Python), toml-rs (Rust) ও @iarna/toml (Node.js)-এর মতো স্ট্যান্ডার্ড পার্সারের আচরণের সাথে মেলে।
টাইপ
TOML সিনট্যাক্স
JSON আউটপুট
String
"value"
"value"
Integer
42
42
Float
3.14
3.14
Boolean
true / false
true / false
Offset Date-Time
1979-05-27T07:32:00Z
"1979-05-27T07:32:00Z"
Local Date-Time
1979-05-27T07:32:00
"1979-05-27T07:32:00"
Local Date
1979-05-27
"1979-05-27"
Local Time
07:32:00
"07:32:00"
Array
[1, 2, 3]
[1, 2, 3]
Table
[section]
{ "section": {} }
Inline Table
{ key = "val" }
{ "key": "val" }
Array of Tables
[[items]]
"items": [{}]
TOML ইন্টিজার পাঠযোগ্যতার জন্য আন্ডারস্কোর সমর্থন করে (যেমন 1_000_000) এবং হেক্সাডেসিমাল (0xDEADBEEF), অক্টাল (0o755) ও বাইনারি (0b11010110) লিটেরেল সমর্থন করে। এগুলো সবই JSON-এ সরল দশমিক সংখ্যায় রূপান্তরিত হয়। TOML ইনফিনিটি ও NaN ফ্লোট মানও সমর্থন করে, কিন্তু এগুলোর কোনো JSON উপস্থাপনা নেই এবং স্ট্রিক্ট মোডে রূপান্তর ত্রুটি সৃষ্টি করবে।
কোড উদাহরণ
চারটি ভাষায় TOML থেকে JSON রূপান্তরের কার্যকরী উদাহরণ। প্রতিটি একটি TOML ফাইল পড়ে, পার্স করে এবং ফরম্যাট করা JSON আউটপুট দেয়।
import tomllib # Python 3.11+ (standard library)
import json
with open('config.toml', 'rb') as f:
data = tomllib.load(f)
print(json.dumps(data, indent=2, default=str))
# Dates become strings: "1979-05-27"
# Arrays of tables become JSON arrays of objects
Go
package main
import (
"encoding/json"
"fmt"
"os"
"github.com/BurntSushi/toml"
)
func main() {
var data map[string]any
_, err := toml.DecodeFile("config.toml", &data)
if err != nil {
panic(err)
}
out, _ := json.MarshalIndent(data, "", " ")
fmt.Println(string(out))
}
TOML কমেন্ট (# দিয়ে শুরু হওয়া লাইন) রূপান্তরের সময় বাদ দেওয়া হয়। JSON কমেন্ট সমর্থন করে না, তাই আউটপুটে সেগুলো সংরক্ষণের কোনো উপায় নেই। কমেন্ট রাখতে হলে, টার্গেট ফরম্যাট হিসেবে JSONC (JSON with Comments) বিবেচনা করুন।
TOML থেকে JSON রূপান্তরে ডেটা হারাতে পারে?
স্ট্যান্ডার্ড TOML ডকুমেন্টের জন্য কোনো ডেটা হারায় না। সমস্ত স্ট্রিং, সংখ্যা, বুলিয়ান, অ্যারে ও টেবিলের সরাসরি JSON সমতুল্য আছে। একমাত্র রূপান্তর হলো তারিখ ও সময়ের মান, যা JSON-এ ISO 8601 স্ট্রিং হয়ে যায়। দুটি এজ কেস সমস্যা তৈরি করতে পারে: TOML ইনফিনিটি ও NaN ফ্লোট সমর্থন করে যার কোনো JSON উপস্থাপনা নেই, এবং অত্যন্ত বড় ইন্টিজার JSON পার্সার প্রিসিশন সীমা অতিক্রম করতে পারে (JavaScript-এ 2^53 - 1)।
TOML-এর অ্যারে অব টেবিল JSON-এ কীভাবে উপস্থাপিত হয়?
TOML-এর [[ডাবল-ব্র্যাকেট]] সিনট্যাক্স একটি অ্যারে অব টেবিল সংজ্ঞায়িত করে। প্রতিটি [[section]] ব্লক একটি JSON অ্যারেতে নতুন অবজেক্ট যোগ করে। উদাহরণস্বরূপ, দুটি [[fruits]] ব্লক দুটি অবজেক্ট সহ একটি JSON অ্যারে তৈরি করে: "fruits": [{...}, {...}]. ডাবল-ব্র্যাকেট সিনট্যাক্স TOML-এর কঠিন অংশগুলোর মধ্যে একটি; JSON আউটপুট কাঠামোটি স্পষ্ট করে দেয়।
রূপান্তর বিপরীতযোগ্য? JSON থেকে TOML-এ ফিরে যাওয়া যাবে?
কাঠামোগতভাবে, হ্যাঁ। যেকোনো JSON অবজেক্টকে TOML টেবিল হিসেবে উপস্থাপন করা যায়, এবং JSON অ্যারে TOML অ্যারেতে ম্যাপ হয়। তবে, কমেন্ট, ডটেড কী গ্রুপিং এবং ইনলাইন টেবিল ফরম্যাটিং-এর মতো TOML-নির্দিষ্ট বৈশিষ্ট্যগুলো প্রাথমিক TOML-থেকে-JSON রূপান্তরের সময় হারিয়ে যায় এবং পুনরুদ্ধার করা যায় না। রাউন্ড-ট্রিপ বৈধ কিন্তু সম্ভবত কম পাঠযোগ্য TOML তৈরি করবে।
কনফিগারেশন ফাইলের জন্য TOML ও JSON-এর মধ্যে পার্থক্য কী?
TOML কনফিগারেশনের জন্য ডিজাইন করা হয়েছিল: এটি কমেন্ট সমর্থন করে, নেস্টেড কাঠামোর জন্য আরও পাঠযোগ্য সিনট্যাক্স আছে, ইন্টিজার ও ফ্লোটের মধ্যে পার্থক্য করে এবং নেটিভ ডেট/টাইম টাইপ রয়েছে। JSON প্রোগ্রামের মধ্যে ডেটা ইন্টারচেঞ্জের জন্য ডিজাইন করা হয়েছিল। JSON টুল ও API দ্বারা আরও ব্যাপকভাবে সমর্থিত, কিন্তু TOML মানুষের পড়া ও সম্পাদনা করা সহজ। অনেক প্রকল্প সোর্স কনফিগারেশনের জন্য TOML ব্যবহার করে এবং ডিপ্লয়মেন্টের জন্য JSON-এ রূপান্তর করে।
এই টুল server.host-এর মতো ডটেড কী কীভাবে পরিচালনা করে?
TOML-এ ডটেড কী (যেমন server.host = "localhost") JSON-এ নেস্টেড অবজেক্ট তৈরি করে: {"server": {"host": "localhost"}}। এটি host কী সহ একটি [server] টেবিল সংজ্ঞায়িত করার সমতুল্য। কনভার্টার স্বয়ংক্রিয়ভাবে ডটেড কীগুলোকে তাদের সম্পূর্ণ নেস্টেড কাঠামোতে রূপান্তর করে।
কেন আমার TOML ফাইল রূপান্তর হতে ব্যর্থ হচ্ছে?
সাধারণ কারণগুলোর মধ্যে রয়েছে: স্ট্রিং মানের চারপাশে উদ্ধৃতি চিহ্ন না থাকা (TOML-এ এগুলো আবশ্যক), মাল্টি-লাইন বেসিক স্ট্রিংয়ের ভেতরে ইন্ডেন্টেশনের জন্য ট্যাব ব্যবহার করা, ডুপ্লিকেট কী সংজ্ঞা, এবং একই পাথের জন্য ডটেড কী ও স্পষ্ট টেবিল হেডার মিশ্রণ করা। কনভার্টার সমস্যাটি খুঁজে পেতে সাহায্য করতে লাইন নম্বর সহ পার্সার ত্রুটি বার্তা প্রদর্শন করে।