JSON থেকে TypeScript / Go / Rust স্ট্রাক্ট জেনারেটর

JSON পেস্ট করুন, লক্ষ্য ভাষা নির্বাচন করুন, সাবলীল টাইপ ডেফিনিশন পান। TypeScript, Go, Rust, Kotlin, Java, C#, Python TypedDict সমর্থিত। quicktype চালিত, ব্রাউজারে চলে।

  1. বাম টেক্সট এরিয়ায় একটি প্রতিনিধিত্বমূলক JSON নমুনা পেস্ট করুন।
  2. লক্ষ্য ড্রপডাউন থেকে লক্ষ্য ভাষা বেছে নিন।
  3. তৈরি করুন ক্লিক করুন। প্রথম ক্লিকে ইঞ্জিন লোড হয় (4G সংযোগে ~2–3 সেকেন্ড); পরবর্তী জেনারেশন তাৎক্ষণিক।
  4. ফলাফল কপি করুন বা সঠিক ফাইল এক্সটেনশন সহ ডাউনলোড করুন।
এটি কী করে?

এক বা একাধিক JSON নমুনা থেকে স্কিমা অনুমান করে আপনার লক্ষ্য ভাষায় সাবলীল টাইপ তৈরি করে। ফিল্ড টাইপ অনুমান করা হয় — স্ট্রিং স্ট্রিং থাকে, সংখ্যা ভাষার সংখ্যাসূচক টাইপ হয়, বুলিয়ান bool হয়, অ্যারে স্লাইস/তালিকা/অ্যারে হয়, নেস্টেড অবজেক্ট নেস্টেড টাইপ হয়। ঐচ্ছিক ফিল্ড (যেগুলি কখনো কখনো null বা নমুনা জুড়ে অনুপস্থিত) আউটপুটে nullable হিসাবে চিহ্নিত করা হয়। quicktype-core দ্বারা চালিত, যা quicktype.io এর পিছনে একই ইঞ্জিন।

উদাহরণ

JSON ইনপুট:

{
  "name": "Ada",
  "age": 36,
  "active": true,
  "tags": ["math", "logic"]
}

TypeScript আউটপুট (লক্ষ্য = TypeScript, টাইপ নাম = User):

export interface User {
  name: string;
  age: number;
  active: boolean;
  tags: string[];
}

সাধারণ ফাঁদ এবং সেগুলি কীভাবে সামলাবেন

JSON থেকে টাইপ অনুমানের মৌলিক সীমা রয়েছে — JSON একটি টাইপ সিস্টেমকে সম্পূর্ণরূপে সীমাবদ্ধ করার জন্য পর্যাপ্ত তথ্য বহন করে না। নিচের প্যাটার্নগুলি কভার করে যেখানে অনুমিত টাইপ আপনি যা চান তার সাথে নাও মিলতে পারে।

  • একক নমুনা থেকে ঐচ্ছিক বনাম প্রয়োজনীয়। একটি একক JSON অবজেক্ট জেনারেটরকে বলতে পারে না কোন ফিল্ডগুলি ঐচ্ছিক। একাধিক নমুনা প্রদান করুন (প্রতিনিধিত্বমূলক অবজেক্টের একটি JSON অ্যারে পেস্ট করুন) যাতে জেনারেটর কখনো কখনো অনুপস্থিত ফিল্ডগুলি ঐচ্ছিক হিসাবে চিহ্নিত করতে পারে।
  • খালি অ্যারে। `{"items": []}` `any` এর একটি অ্যারে তৈরি করে — জেনারেটরের অনুমান করার জন্য কোনো এলিমেন্ট নেই। কমপক্ষে একটি জনবহুল উদাহরণ অন্তর্ভুক্ত করুন, বা জেনারেশনের পরে হাত দিয়ে টাইপ ঠিক করুন।
  • ভিন্ন অ্যারে এলিমেন্ট। একটি JSON অ্যারে `[1, "two"]` একটি ইউনিয়ন টাইপে পরিণত হয় — কিছু লক্ষ্য ভাষায় (Go-তে বিশেষভাবে) ফলাফল আরামদায়ক নাও হতে পারে। যদি আপনার বাস্তব ডেটাতে অ্যারে একসমান হওয়ার কথা থাকে, নমুনা ঠিক করুন।
  • তারিখ স্ট্রিং। JSON-এ Date টাইপ নেই। ISO 8601 তারিখ স্ট্রিংগুলি `string` হিসাবে অনুমান করা হয়। quicktype কখনো কখনো TypeScript আউটপুটে এদের Date হিসাবে শনাক্ত করতে পারে — শক্তিশালী টাইপিং চাইলে হাত দিয়ে সমন্বয় করুন।
  • যথার্থতা হারানো সংখ্যাসূচক ID। 2^53 এর চেয়ে বড় JSON সংখ্যা (বড় 64-বিট ID) JavaScript দ্বারা পার্স করার সময় যথার্থতা হারায়। জেনারেটেড TypeScript টাইপ যাইহোক `number` ব্যবহার করে। 64-বিট যথার্থতার জন্য, আপনার JSON-এ `string` ব্যবহার করুন বা হাত দিয়ে `bigint` টাইপে স্থানান্তর করুন।
  • আন্ডারস্কোর বনাম camelCased ফিল্ড। জেনারেটর JSON ফিল্ড নামকরণ সংরক্ষণ করে। যদি আপনার JSON snake_case ব্যবহার করে কিন্তু লক্ষ্য ভাষা camelCase প্রত্যাশা করে, আউটপুট প্রযোজ্য হলে serde/json অ্যানোটেশন সহ snake_case ফিল্ড ব্যবহার করে। পোস্ট-প্রসেসিং বা quicktype CLI ফ্ল্যাগ ব্যবহার করে ওভাররাইড করুন।
প্রায়শই জিজ্ঞাসিত প্রশ্ন

প্রথম তৈরি করুন ধীর কেন?

quicktype ইঞ্জিন বান্ডেল gzipped প্রায় 465 KB। এটি প্রথম তৈরি করুন ক্লিকে লোড হয়, যা 4G সংযোগে 2–3 সেকেন্ড সময় নেয়। এর পরে মডিউল বাকি পেজ সেশনের জন্য ক্যাশ হয়ে যায় — এবং ব্রাউজার ভিজিটের মধ্যে ক্যাশ করে, তাই ক্যাশ মুছে না গেলে পরবর্তী প্রথম-ক্লিকগুলিও তাৎক্ষণিক।

আমি কি একাধিক JSON নমুনা থেকে তৈরি করতে পারি?

আপনার নমুনাগুলিকে JSON অ্যারেতে মুড়ে দিন এবং অ্যারেটি পেস্ট করুন। জেনারেটর নমুনা জুড়ে দেখা ফিল্ডগুলির ইউনিয়ন অনুমান করে এবং কমপক্ষে একটি থেকে অনুপস্থিত ফিল্ডগুলিকে ঐচ্ছিক হিসাবে চিহ্নিত করে। আপনার তৈরি টাইপগুলি বাস্তব ডেটার পরিবর্তন সহ্য করে নিশ্চিত করার সঠিক উপায় এটি।

ব্যাকএন্ড কোডের জন্য আমি কোন ভাষা বেছে নেব?

আপনার প্রকল্প ইতিমধ্যে যা ব্যবহার করছে তার সাথে মেলান। Go আউটপুট `encoding/json`-এর জন্য মান স্ট্রাক্ট ট্যাগ ব্যবহার করে। Rust serde derives ব্যবহার করে। Kotlin kotlinx.serialization অ্যানোটেশন ব্যবহার করে। Java Jackson-এর সাথে সামঞ্জস্যপূর্ণ POJO তৈরি করে। পছন্দ প্রকল্প-নির্দিষ্ট, পছন্দ-ভিত্তিক নয়।

ফিল্ড মন্তব্যগুলি কি সংরক্ষিত?

JSON-এ মন্তব্য সিনট্যাক্স নেই, তাই বহন করার মতো ইনপুটে কোনো মন্তব্য নেই। quicktype কিছু ভাষার আউটপুটে ডক মন্তব্য অন্তর্ভুক্ত করতে পারে — এগুলি স্বয়ংক্রিয়ভাবে তৈরি করা বিবরণ, ব্যবহারকারীর সামগ্রী নয়।

আমার JSON কি আপলোড হয়?

না। সব আপনার ব্রাউজারে চলে — আপনার ইনপুট এই পেজে quicktype-core JavaScript মডিউল দ্বারা স্থানীয়ভাবে প্রক্রিয়া করা হয়। quicktype-core নিজেই একই উৎস থেকে লোড হয় (এই সাইটের স্ট্যাটিক অ্যাসেট হোস্ট); কোনো তৃতীয়-পক্ষের সার্ভার আপনার ডেটা দেখে না।

আমি কত বড় JSON নমুনা ব্যবহার করতে পারি?

জেনারেটর লক্ষণীয় সময় নিতে শুরু করার আগে প্রায় 5 MB JSON পর্যন্ত। জেনারেটর প্রতিনিধিত্বমূলক নমুনার জন্য ডিজাইন করা হয়েছে, পূর্ণ ডেটাসেট নয় — সাধারণত একটি পরিচ্ছন্ন স্কিমা অনুমান করতে কয়েকটি অবজেক্টই যথেষ্ট।