টুল
গাইড

JSON থেকে কোড জেনারেটর

JSON

JSON থেকে TypeScript, Java, Go এবং C# এনটিটি টাইপ তৈরি করুন। নেস্টেড অবজেক্ট ও অ্যারে অনুমান করে।

100% ক্লায়েন্ট-সাইড কোনো ব্যাকএন্ড নেই

দূরবর্তী URL আনা হয় না; আপনার JSON সরাসরি পেস্ট করুন।

JSON
আউটপুট
এই পৃষ্ঠায়

JSON থেকে কোড জেনারেটর কী?#

একটি JSON থেকে কোড জেনারেটর একটি নমুনা JSON নথি পড়ে, ডেটার আকৃতি বের করে — কোন ফিল্ডগুলো স্ট্রিং, কোনগুলো সংখ্যা, কোনগুলো নেস্টেড অবজেক্ট, কোনগুলো কী-এর অ্যারে — এবং এমন এনটিটি টাইপ লেখে যা একটি প্রকৃত প্রোগ্রাম সেই ডেটা ধারণ করতে ব্যবহার করবে। একটি API প্রতিক্রিয়ার সাথে মেলাতে নিজ হাতে একটি TypeScript ইন্টারফেস, একটি Java ক্লাস, একটি Go স্ট্রাক্ট, বা একটি C# ক্লাস কোড করার বদলে, আপনি একটি উদাহরণ প্রতিক্রিয়া পেস্ট করেন এবং আপনার প্রোজেক্টে ফেলে দেওয়ার জন্য প্রস্তুত টাইপ পেয়ে যান।

পর্দার পেছনে এটি পার্স করা মান অতিক্রম করে এবং একটি স্কিমা অনুমান করে। নেস্টেড অবজেক্টগুলো তাদের নিজস্ব নামকৃত টাইপ হয়ে যায়; একটি অ্যারের উপাদানের ধরন হলো প্রতিটি উপাদানের আকৃতির সংযোজন (তাই এমন অবজেক্টের একটি তালিকা যাদের সবার কী এক নয় তবুও ফিল্ডের ইউনিয়ন সহ একটি টাইপ তৈরি করে)। এমন ফিল্ডের নাম যা বৈধ আইডেন্টিফায়ার নয় — একটি হাইফেনযুক্ত কী যেমন first-name, বা একটি সংখ্যা দিয়ে শুরু হওয়া — একটি বৈধ আইডেন্টিফায়ারে স্যানিটাইজ করা হয় এবং মূল কী একটি সিরিয়ালাইজেশন অ্যানোটেশন হিসেবে সংরক্ষিত হয়, তাই রাউন্ড-ট্রিপিং এখনও কাজ করে।

আউটপুট হলো সরল-টেক্সট সোর্স কোড যার এই পৃষ্ঠার উপর কোনো রানটাইম নির্ভরতা নেই। এটি কপি করুন, আপনার কোডবেসে পেস্ট করুন, টাইপের নামগুলো সামঞ্জস্য করুন, এবং আপনার একটি শুরুর পয়েন্ট আছে — একটি সমাপ্ত মডেল নয়, কিন্তু বিরক্তিকর কঙ্কালটি ইতিমধ্যে আপনার জন্য লেখা হয়ে গেছে।

ব্যবহারবিধি#

  1. ভাষা ড্রপডাউন দিয়ে টার্গেট বেছে নিন: TypeScript, Java, Go, বা C#
  2. রুট নাম সেট করুন (ডিফল্ট Root)। এটি সর্ববহিরাগত টাইপের নাম হয়ে যায় — যেমন User, Order, Response
  3. আপনার JSON বাঁদিকের পেইনে পেস্ট করুন। তৈরি করা কোড ডানদিকে লাইভ উপস্থিত হয়; স্ট্যাটাস লাইন ত্রুটি রিপোর্ট করে (অবৈধ JSON, খালি ইনপুট)।
  4. কোডটি ক্লিপবোর্ডে নিতে কপি ক্লিক করুন।
  5. নমুনা একটি সাব-অবজেক্ট এবং একটি অ্যারে সহ একটি নেস্টেড অবজেক্ট লোড করে; মুছুন উভয় পেইন রিসেট করে।

মূল বৈশিষ্ট্য#

  • চারটি টার্গেট ভাষা। TypeScript ইন্টারফেস, Java ক্লাস, Go স্ট্রাক্ট, এবং C# ক্লাস — একটি ইনপুট, চারটি আউটপুট, একটি ড্রপডাউন দিয়ে স্যুইচ করা।
  • স্কিমা অনুমান, আক্ষরিক টাইপিং নয়। নেস্টেড অবজেক্টগুলো নামকৃত টাইপ হয়ে যায়; অবজেক্টের অ্যারে একটি অস্বচ্ষ any তালিকার বদলে একটি নামকৃত উপাদানের ধরন তৈরি করে।
  • ভিন্নধর্মী-অ্যারে সংযোজন। যখন অ্যারে উপাদানগুলোর ভিন্ন ভিন্ন ফিল্ড থাকে, অনুমান করা টাইপ হলো ইউনিয়ন — বিশৃঙ্খল বাস্তব-বিশ্বের প্রতিক্রিয়াগুলোর জন্য উপযোগী যেখানে প্রতিটি আইটেমের প্রতিটি কী নাও থাকতে পারে।
  • আইডেন্টিফায়ার-নিরাপদ, কী-বিশ্বস্ত। এমন কী যা বৈধ আইডেন্টিফায়ার নয় তা স্যানিটাইজ করা হয়, এবং মূল কী একটি সিরিয়ালাইজেশন অ্যানোটেশন হিসেবে রাখা হয় (@JsonProperty, একটি Go json: ট্যাগ, JsonPropertyName), তাই মূল JSON এখনও সঠিকভাবে ডিসিরিয়ালাইজ হয়।
  • লাইভ এবং স্থানীয়। আপনি টাইপ করার সাথে সাথে বা বিকল্প স্যুইচ করার সাথে সাথে জেনারেশন আপনার ব্রাউজারে চলে; ডেটা কখনো পৃষ্ঠা ছাড়ে না।

ব্যবহারিক উদাহরণ#

ভাষা TypeScript সেট করা এবং রুট নাম Root দিয়ে নমুনা লোড করুন, এবং ইনপুট হলো:

{
  "id": 1,
  "name": "Ada",
  "active": true,
  "address": { "city": "London", "zip": "NW1" },
  "tags": ["math", "logic"]
}

জেনারেটর দুটি ইন্টারফেস নির্গত করে — রুট, এবং নেস্টেড অবজেক্টের জন্য একটি নামকৃত Address টাইপ:

export interface Root {
  id: number;
  name: string;
  active: boolean;
  address: Address;
  tags: Array<string>;
}

export interface Address {
  city: string;
  zip: string;
}

ভাষাটি Go-তে স্যুইচ করুন এবং একই ইনপুট json: ট্যাগ সহ স্ট্রাক্ট হয়ে যায় যা মূল কী সংরক্ষণ করে:

package model

type Root struct {
  Id       float64   `json:"id"`
  Name     string    `json:"name"`
  Active   bool      `json:"active"`
  Address  Address   `json:"address"`
  Tags     []string  `json:"tags"`
}

type Address struct {
  City  string  `json:"city"`
  Zip   string  `json:"zip"`
}

খেয়াল করুন কীভাবে id, একটি JSON সংখ্যা, TypeScript-এ number এবং Go-তে float64 হিসেবে অবতরণ করছে — জেনারেটর পূর্ণসংখ্যা বনাম ফ্লোটিং-পয়েন্ট অনুমান করে না, কারণ JSON নিজেই সেগুলোকে আলাদা করে না।

প্রশ্নোত্তর#

আমার পূর্ণসংখ্যা ফিল্ড কেন float64 / Double / double হিসেবে টাইপ করা হয়?#

কারণ JSON-এ একটি একক সংখ্যা প্রকার আছে এবং 5-কে 5.0 থেকে আলাদা করার কোনো উপায় নেই। জেনারেটর প্রতিটি JSON সংখ্যাকে টার্গেট ভাষার সাধারণ সংখ্যাত্মক প্রকারে ম্যাপ করে — TypeScript-এ number, Java-তে Double, Go-তে float64, C#-এ double — তাই টাইপটি সর্বদা যথেষ্ট প্রশস্ত যাতে মান যা হয়ে যায় তা ধারণ করতে পারে। আপনি যদি জানেন একটি ফিল্ড সর্বদা পূর্ণসংখ্যা, তবে পরে নিজ হাতে তা int / Long / int64-এ সংকুচিত করুন।

যখন আমার অ্যারের অবজেক্টগুলোর সবার ফিল্ড এক নয় তখন কী হয়?#

তাদের আকৃতি সংযোজিত হয়। [{ "a": 1 }, { "a": 2, "b": "x" }]-এর মতো একটি অ্যারে a এবং b উভয় সহ একটি উপাদানের ধরন তৈরি করে, তাই একটি একক টাইপ প্রতিটি আইটেম কভার করে। যদি দুটি উপাদান একটি ফিল্ডের ধরনে অসামঞ্জস্যপূর্ণভাবে ভিন্নমত পোষণ করে (ধরুন এখানে একটি সংখ্যা, সেখানে একটি স্ট্রিং), সেই ফিল্ডটি একটি পাশের সপক্ষে নিয়ে অন্যটির ব্যাপারে ভুল না করে any / Object-এ অবনমিত হয়।

আমার JSON-এর একটি ফিল্ডে হাইফেন আছে, যেমন first-name। এটি কি ভাঙবে?#

না। জেনারেটর first-name-কে ফিল্ডের নামের জন্য একটি বৈধ আইডেন্টিফায়ারে (firstName) পরিণত করে এবং একটি সিরিয়ালাইজেশন অ্যানোটেশন নির্গত করে যা মূল কী রেকর্ড করে — Java-তে @JsonProperty("first-name"), Go-তে একটি json:"first-name" ট্যাগ, C#-এ [JsonPropertyName("first-name")], এবং TypeScript-এ একটি উদ্ধৃত "first-name" কী। তৈরি করা কোডটি তাই মূল JSON অপরিবর্তিতভাবে ডিসিরিয়ালাইজ করে।

এটি একটি null মানের সাথে কী করে?#

যার মান null এমন একটি ফিল্ডকে অজানা প্রকার হিসেবে গণ্য করা হয়। TypeScript-এ এটি একটি ঐচ্ছিক any হয়ে যায় (field?: any;); Java এবং C#-এ এটি Object / object হয়ে যায়; Go-তে, interface{}। এটি একটি ইচ্ছাকৃত সংকেত — null আপনাকে কিছুই বলে না যখন ফিল্ডটি উপস্থিত থাকে তখন তা কী ধারণ করে, তাই জেনারেটর অনুমান করতে অস্বীকার করে এবং আপনার পূরণ করার জন্য ছেড়ে দেয়।