ToolDeck

JSON থেকে Java

JSON থেকে Java POJO ক্লাস তৈরি করুন

একটি উদাহরণ চেষ্টা করুন
রুট ক্লাসের নাম:

JSON ইনপুট

Java আউটপুট

স্থানীয়ভাবে চলে · গোপন তথ্য পেস্ট করা নিরাপদ
Java ক্লাস এখানে দেখা যাবে…

JSON থেকে Java ক্লাস রূপান্তর কী?

JSON থেকে Java ক্লাস রূপান্তর একটি কাঁচা JSON অবজেক্ট নিয়ে private ফিল্ড, getter ও setter সহ Plain Old Java Object (POJO) সংজ্ঞা তৈরি করে। Java-তে কোনো অন্তর্নির্মিত JSON টাইপ সিস্টেম নেই, তাই প্রতিটি JSON API রেসপন্স, কনফিগ ফাইল বা মেসেজ পেলোডের জন্য টাইপ-নিরাপদভাবে কাজ করতে একটি সংশ্লিষ্ট ক্লাসের প্রয়োজন। Jackson ও Gson-এর মতো লাইব্রেরি reflection-এর মাধ্যমে JSON কী-গুলো Java ফিল্ডে ম্যাপ করে, কিন্তু তার জন্য ক্লাস সংজ্ঞা আগে থেকেই থাকতে হয়।

JSON deserialization-এর জন্য একটি আদর্শ Java POJO প্রতিটি JSON কী-এর জন্য একটি private ফিল্ড, একটি no-argument কনস্ট্রাক্টর এবং প্রতিটি ফিল্ডের জন্য একটি getter/setter জুটি ঘোষণা করে। নেস্টেড JSON অবজেক্ট আলাদা ক্লাস হয়। অ্যারে java.util.List import সহ List<T> ফিল্ডে পরিণত হয়। Primitive JSON টাইপগুলো Java primitive (int, double, boolean) বা generics-এর ভেতরে ব্যবহারের সময় তাদের wrapper টাইপে (Integer, Double, Boolean) ম্যাপ হয়। Null মান সাধারণত Object বা nullable রেফারেন্স টাইপে ম্যাপ হয়।

এই ক্লাস সংজ্ঞাগুলো হাতে লেখা পুনরাবৃত্তিমূলক কাজ। প্রতিটি JSON কী পড়তে হয়, মান থেকে Java টাইপ নির্ধারণ করতে হয়, camelCase JSON থেকে camelCase Java ফিল্ডে নামকরণ রীতি রূপান্তর করতে হয়, নেস্টেড অবজেক্টের জন্য PascalCase ক্লাস নাম তৈরি করতে হয় এবং getter/setter বয়লারপ্লেট যোগ করতে হয়। ১৫টি ফিল্ড ও ৩টি নেস্টেড অবজেক্ট সহ একটি JSON অবজেক্টের জন্য এর অর্থ ৪টি ক্লাস, ৩০+ মেথড লেখা এবং সবকিছু সামঞ্জস্যপূর্ণ রাখা। একটি কনভার্টার এই কাজ মিলিসেকেন্ডে সম্পন্ন করে।

JSON থেকে Java কনভার্টার কেন ব্যবহার করবেন?

হাতে JSON থেকে Java POJO তৈরির অর্থ হলো প্রতিটি ফিল্ড পরীক্ষা করা, নমুনা মান থেকে টাইপ অনুমান করা, getter/setter জুটি লেখা এবং প্রতিটি নেস্টেড অবজেক্টের জন্য এই প্রক্রিয়া পুনরায় করা। API চুক্তি পরিবর্তিত হলে সব হাতে আপডেট করতে হয়। একটি কনভার্টার এই যান্ত্রিক কাজ দূর করে।

তাৎক্ষণিক POJO তৈরি
JSON পেস্ট করুন এবং এক সেকেন্ডেরও কম সময়ে সম্পূর্ণ Java ক্লাস সংজ্ঞা পান। নেস্টেড অবজেক্ট, লিস্ট ও primitive টাইপ স্বয়ংক্রিয়ভাবে শনাক্ত ও ম্যাপ হয়।
🔒
গোপনীয়তা-কেন্দ্রিক প্রক্রিয়াকরণ
রূপান্তরটি সম্পূর্ণ আপনার ব্রাউজারেই চলে। আপনার JSON ডেটা কখনো আপনার মেশিন ছাড়ে না। API কী, টোকেন ও উৎপাদন ডেটা ব্যক্তিগত থাকে।
📝
সঠিক টাইপ অনুমান
প্রতিটি তৈরি ফিল্ডে JSON মান থেকে অনুমান করা উপযুক্ত Java টাইপ ব্যবহার হয়: String, int, double, boolean, List<T>, বা null-এর জন্য Object। Wrapper টাইপ generics-এর ভেতরে ব্যবহার হয়।
📦
ইনস্টল বা সাইনআপ নেই
পেজ খুলুন এবং JSON পেস্ট করুন। কোনো JDK লাগবে না, কোনো Maven নির্ভরতা নেই, কোনো অ্যাকাউন্ট নেই। ব্রাউজার সহ যেকোনো ডিভাইসে কাজ করে।

JSON থেকে Java ব্যবহারের ক্ষেত্র

Spring Boot API ডেভেলপমেন্ট
API JSON নমুনা থেকে request ও response DTO তৈরি করুন। প্রত্যাশিত পেলোড আকার পেস্ট করুন এবং Spring controller-এ @RequestBody ও @ResponseBody annotation-এর জন্য প্রস্তুত Java ক্লাস পান।
Android অ্যাপ ডেভেলপমেন্ট
Retrofit বা Volley নেটওয়ার্ক রেসপন্সের জন্য মডেল ক্লাস তৈরি করুন। আপনার backend API রিটার্ন করা JSON পেস্ট করুন এবং Gson বা Moshi কনভার্টারের সাথে সামঞ্জস্যপূর্ণ POJO পান।
Microservice ইন্টিগ্রেশন
Kafka, RabbitMQ বা gRPC JSON পেলোডের জন্য টাইপড মেসেজ ক্লাস সংজ্ঞায়িত করুন। একটি নমুনা মেসেজ পেস্ট করুন এবং সার্ভিসগুলোর মধ্যে প্রত্যাশিত চুক্তি নথিভুক্ত করে এমন POJO তৈরি করুন।
পুরনো সিস্টেম স্থানান্তর
টাইপড ক্লায়েন্টে REST endpoint মোড়কে দেওয়ার সময় JSON API রেসপন্সকে Java ক্লাসে রূপান্তর করুন। আলগা-টাইপের Map<String, Object> প্যাটার্ন থেকে সঠিক domain মডেলে স্থানান্তরের সময় কার্যকর।
QA ও পরীক্ষা স্বয়ংক্রিয়করণ
API রেসপন্স নমুনা থেকে টাইপড পরীক্ষা fixture তৈরি করুন। QA ইঞ্জিনিয়াররা আসল JSON রেসপন্স পেস্ট করে AssertJ assertion সহ JUnit বা TestNG পরীক্ষা suite-এ ব্যবহারের জন্য POJO সংজ্ঞা তৈরি করতে পারেন।
Java OOP প্যাটার্ন শেখা
শিক্ষার্থীরা যেকোনো JSON কাঠামো পেস্ট করে দেখতে পারেন কীভাবে Java ক্লাস, ফিল্ড, getter, setter ও নেস্টেড টাইপ দিয়ে এটি উপস্থাপন করে। আউটপুট বিমূর্ত ধারণাকে বাস্তব করে তোলে।

JSON থেকে Java টাইপ ম্যাপিং

প্রতিটি JSON মান একটি নির্দিষ্ট Java টাইপে ম্যাপ হয়। নিচের সারণিতে কনভার্টার প্রতিটি JSON টাইপ কীভাবে তার Java সমতুল্যে অনুবাদ করে তা দেখানো হয়েছে। Alternative কলামে List<T>-এর মতো generic প্রসঙ্গে ব্যবহৃত wrapper টাইপ বা Records-এর মতো নতুন Java বৈশিষ্ট্য দেখানো হয়েছে।

JSON টাইপউদাহরণJava টাইপবিকল্প
string"hello"StringString
number (integer)42intint / Integer
number (float)3.14doubledouble / Double
booleantruebooleanboolean / Boolean
nullnullObjectObject (or @Nullable String)
object{"k": "v"}NestedClassRecord (Java 16+)
array of strings["a", "b"]List<String>List<String>
array of objects[{"id": 1}]List<Item>List<Item>
mixed array[1, "a"]List<Object>List<Object>

Java JSON Annotation রেফারেন্স

Jackson বা Gson দিয়ে JSON deserialize করার সময়, annotation নিয়ন্ত্রণ করে JSON কী কীভাবে Java ফিল্ডে ম্যাপ হয়, অজানা ফিল্ড কীভাবে পরিচালিত হয় এবং null মান কীভাবে ব্যবহার করা হয়। এই রেফারেন্স তৈরি POJO-এর সাথে কাজ করার সময় সবচেয়ে বেশি সম্মুখীন হওয়া annotation কভার করে।

Annotationউদ্দেশ্যলাইব্রেরি
@JsonProperty("name")Maps a JSON key to a Java field with a different nameJackson
@SerializedName("name")Same as @JsonProperty, but for the Gson libraryGson
@JsonIgnorePropertiesIgnores unknown JSON keys during deserialization instead of failingJackson
@NullableMarks a field as accepting null values from JSON inputJSR 305 / JetBrains
@NotNullEnforces that a field must not be null, throws on violationBean Validation
@JsonFormat(pattern=...)Defines a date/time format for serialization and deserializationJackson

POJO বনাম Record বনাম Lombok

JSON ডেটা ধারণের জন্য টাইপড কাঠামো সংজ্ঞায়িত করতে Java-তে তিনটি সাধারণ উপায় আছে। প্রতিটি ভিন্ন প্রকল্প শৈলী ও Java সংস্করণের সাথে মানানসই। POJO হলো সবচেয়ে বেশি সামঞ্জস্যপূর্ণ ঐতিহ্যবাহী প্যাটার্ন। Record অপরিবর্তনীয় ডেটার জন্য বয়লারপ্লেট কমায়। Lombok annotation-এর মাধ্যমে কম্পাইলেশন সময়ে getter, setter ও কনস্ট্রাক্টর তৈরি করে।

POJO
ঐতিহ্যবাহী Java প্যাটার্ন। Java 8+-এ কাজ করে। private ফিল্ড এবং getter/setter মেথড সংজ্ঞায়িত করুন। পরিবর্তনযোগ্যতা ও কাস্টম লজিকে পূর্ণ নিয়ন্ত্রণ। প্রতিটি JSON লাইব্রেরির সাথে সামঞ্জস্যপূর্ণ (Jackson, Gson, Moshi)। Spring Boot, Android ও এন্টারপ্রাইজ কোডবেসের জন্য আদর্শ পছন্দ।
Record (Java 16+)
Java 16 থেকে অন্তর্নির্মিত (14-তে প্রিভিউ)। সংক্ষিপ্ত সিনট্যাক্স: record User(int id, String name) কনস্ট্রাক্টর, accessor, equals, hashCode ও toString তৈরি করে। ইনস্ট্যান্স অপরিবর্তনীয়। Jackson সংস্করণ 2.12 থেকে record সমর্থন করে। value object ও DTO-এর জন্য সেরা যেখানে setter প্রয়োজন নেই।
Lombok @Data
তৃতীয়-পক্ষ compile-time annotation processor। @Data getter, setter, equals, hashCode ও toString তৈরি করে। @Builder একটি builder প্যাটার্ন যোগ করে। পরিবর্তনযোগ্যতা বজায় রেখে বয়লারপ্লেট প্রায় Record স্তরে নামিয়ে আনে। build tool (Maven/Gradle) ও IDE plugin-এ Lombok যোগ করতে হবে।

কোড উদাহরণ

এই উদাহরণগুলো deserialization-এর জন্য Jackson সহ তৈরি Java POJO কীভাবে ব্যবহার করবেন, JavaScript ও Python থেকে প্রোগ্রামেটিক্যালি Java ক্লাস কীভাবে তৈরি করবেন এবং batch generation-এর জন্য jsonschema2pojo CLI টুল কীভাবে ব্যবহার করবেন তা দেখায়।

Java (Jackson deserialization)
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import java.util.List;

@JsonIgnoreProperties(ignoreUnknown = true)
public class User {
    private int id;
    private String name;
    private String email;
    private boolean active;
    private double score;
    private Address address;
    private List<String> tags;

    // getters and setters omitted for brevity

    public static void main(String[] args) throws Exception {
        String json = "{\"id\":1,\"name\":\"Alice\",\"email\":\"alice@example.com\",\"active\":true,\"score\":98.5,\"address\":{\"street\":\"123 Main St\",\"city\":\"Springfield\",\"zip\":\"12345\"},\"tags\":[\"admin\",\"user\"]}";
        ObjectMapper mapper = new ObjectMapper();
        User user = mapper.readValue(json, User.class);
        System.out.println(user.getName()); // -> Alice
    }
}

class Address {
    private String street;
    private String city;
    private String zip;
    // getters and setters
}
JavaScript (generate Java POJO from JSON)
// Minimal JSON-to-Java-POJO generator in JS
function jsonToJava(obj, name = "Root") {
  const classes = [];
  function infer(val, fieldName) {
    if (val === null) return "Object";
    if (typeof val === "string") return "String";
    if (typeof val === "number") return Number.isInteger(val) ? "int" : "double";
    if (typeof val === "boolean") return "boolean";
    if (Array.isArray(val)) {
      const first = val.find(v => v !== null);
      if (!first) return "List<Object>";
      const elem = infer(first, fieldName);
      const boxed = elem === "int" ? "Integer" : elem === "double" ? "Double" : elem === "boolean" ? "Boolean" : elem;
      return `List<${boxed}>`;
    }
    if (typeof val === "object") {
      const cls = fieldName.charAt(0).toUpperCase() + fieldName.slice(1);
      build(val, cls);
      return cls;
    }
    return "Object";
  }
  function build(obj, cls) {
    const fields = Object.entries(obj).map(([k, v]) => {
      const type = infer(v, k);
      return `    private ${type} ${k};`;
    });
    classes.push(`public class ${cls} {\n${fields.join("\n")}\n}`);
  }
  build(obj, name);
  return classes.join("\n\n");
}

console.log(jsonToJava({ id: 1, name: "Alice", scores: [98, 85] }, "User"));
// public class User {
//     private int id;
//     private String name;
//     private List<Integer> scores;
// }
Python (generate Java classes from JSON)
import json

def json_to_java(obj: dict, class_name: str = "Root") -> str:
    classes = []

    def infer(val, name):
        if val is None:
            return "Object"
        if isinstance(val, bool):
            return "boolean"
        if isinstance(val, int):
            return "int"
        if isinstance(val, float):
            return "double"
        if isinstance(val, str):
            return "String"
        if isinstance(val, list):
            if not val:
                return "List<Object>"
            elem = infer(val[0], name)
            boxed = {"int": "Integer", "double": "Double", "boolean": "Boolean"}.get(elem, elem)
            return f"List<{boxed}>"
        if isinstance(val, dict):
            cls = name[0].upper() + name[1:]
            build(val, cls)
            return cls
        return "Object"

    def build(obj, cls):
        fields = [f"    private {infer(v, k)} {k};" for k, v in obj.items()]
        classes.append(f"public class {cls} {{\n" + "\n".join(fields) + "\n}")

    build(obj, class_name)
    return "\n\n".join(classes)

data = json.loads('{"id": 1, "name": "Alice", "tags": ["admin"]}')
print(json_to_java(data, "User"))
# public class User {
#     private int id;
#     private String name;
#     private List<String> tags;
# }
CLI (jsonschema2pojo)
# Install jsonschema2pojo (requires Java 8+)
# Download from https://github.com/joelittlejohn/jsonschema2pojo

# Generate POJOs from a JSON file
jsonschema2pojo --source user.json --target src/main/java \
  --source-type json --annotation-style jackson2

# Generate with Gson annotations instead
jsonschema2pojo --source user.json --target src/main/java \
  --source-type json --annotation-style gson

# From a JSON string via stdin
echo '{"id": 1, "name": "Alice", "tags": ["admin"]}' | \
  jsonschema2pojo --source-type json --annotation-style jackson2 \
  --target src/main/java --target-package com.example.model

সচরাচর জিজ্ঞাসা

POJO ও Java Bean-এর মধ্যে পার্থক্য কী?
একটি POJO (Plain Old Java Object) হলো কোনো framework dependency ছাড়া যেকোনো সরল Java ক্লাস। একটি Java Bean হলো নির্দিষ্ট রীতি অনুসরণকারী POJO: no-argument কনস্ট্রাক্টর, public getter ও setter সহ private ফিল্ড এবং Serializable বাস্তবায়ন। JSON ম্যাপিংয়ের জন্য বেশিরভাগ লাইব্রেরি Bean রীতি (getter/setter) প্রয়োজন করে কিন্তু Serializable প্রয়োজন করে না। এই টুলের তৈরি ক্লাসগুলো Bean getter/setter প্যাটার্ন অনুসরণ করে।
তৈরি POJO-এর সাথে কোন JSON লাইব্রেরি ব্যবহার করব?
Jackson (com.fasterxml.jackson) সবচেয়ে বেশি ব্যবহৃত Java JSON লাইব্রেরি এবং Spring Boot-এর ডিফল্ট। Gson (com.google.gson) Android প্রকল্পে জনপ্রিয় এবং এর API সরল। Moshi হলো Square-এর নতুন বিকল্প, Kotlin interoperability-র জন্য ডিজাইন করা। তিনটিই getter ও setter সহ আদর্শ POJO-এর সাথে কাজ করে।
কনভার্টার নেস্টেড JSON অবজেক্ট কীভাবে পরিচালনা করে?
প্রতিটি নেস্টেড অবজেক্ট একটি আলাদা Java ক্লাস হয়। "address" নামের একটি JSON ফিল্ডে যদি "street" ও "city" কী সহ একটি অবজেক্ট থাকে, কনভার্টার সেই ফিল্ড ও টাইপ সহ একটি Address ক্লাস তৈরি করে এবং parent ফিল্ডকে Address টাইপ দেয়। গভীরভাবে নেস্টেড কাঠামো থেকে একাধিক ক্লাস সংজ্ঞা তৈরি হয়।
JSON ফিল্ড null হলে কী হয়?
Null ফিল্ড Object টাইপ হয় কারণ শুধুমাত্র null মান থেকে কনভার্টার সঠিক টাইপ অনুমান করতে পারে না। বাস্তবে, API চুক্তি জানার পর Object-কে প্রত্যাশিত টাইপ (String, Integer ইত্যাদি) দিয়ে প্রতিস্থাপন করবেন। Jackson ব্যবহার করলে null মান ডিফল্টভাবে রেফারেন্স-টাইপ ফিল্ডে ত্রুটি ছাড়াই নির্ধারিত হয়।
JSON-এর জন্য POJO-এর পরিবর্তে Java Record ব্যবহার করব কি?
যেখানে setter প্রয়োজন নেই সেখানে অপরিবর্তনীয় ডেটা ট্রান্সফার অবজেক্টের জন্য Record ভালো কাজ করে। Jackson সংস্করণ 2.12 থেকে Record সমর্থন করে এবং Gson পরবর্তী সংস্করণে সমর্থন যোগ করেছে। প্রকল্প Java 16+-এ চললে এবং API রেসপন্স শুধুমাত্র পঠনযোগ্য ডেটা হিসেবে ব্যবহার করলে Record বয়লারপ্লেট কমায়। পরিবর্তনযোগ্যতার প্রয়োজন হলে বা Java 8/11 লক্ষ্য করলে POJO ব্যবহার করুন।
বৈধ Java identifier নয় এমন JSON কী কীভাবে পরিচালনা করব?
"first-name" বা "2nd_place"-এর মতো JSON কী বৈধ Java ফিল্ড নাম নয়। JSON কীকে firstName-এর মতো বৈধ Java ফিল্ড নামে ম্যাপ করতে Jackson-এ @JsonProperty("first-name") বা Gson-এ @SerializedName("first-name") ব্যবহার করুন। কনভার্টার স্বয়ংক্রিয়ভাবে কী নাম camelCase Java ফিল্ডে রূপান্তর করে।
JSON নমুনার পরিবর্তে JSON Schema থেকে Java ক্লাস তৈরি করা যায়?
এই টুল JSON ডেটা নমুনা থেকে ক্লাস তৈরি করে। JSON Schema ইনপুটের জন্য jsonschema2pojo প্রকল্প ব্যবহার করুন (CLI টুল, Maven plugin ও Gradle plugin হিসেবে পাওয়া যায়)। এটি একটি JSON Schema ফাইল পড়ে এবং schema বিবরণ থেকে যাচাই সীমাবদ্ধতা, ডিফল্ট মান ও ডকুমেন্টেশন সহ annotated Java ক্লাস তৈরি করে।

সম্পর্কিত টুলস

JSON ফরম্যাটার ও বিউটিফায়ারসিনট্যাক্স হাইলাইটিং সহ JSON ফরম্যাট ও বিউটিফাই করুনJSON ভ্যালিডেটরJSON সিনট্যাক্স ও স্ট্রাকচার ভ্যালিডেট করুনJSON ডিফদুটি JSON অবজেক্ট তুলনা করুন ও পার্থক্য হাইলাইট করুনJSON প্রিটি প্রিন্টপাঠযোগ্যতার জন্য কাস্টমাইজযোগ্য ইন্ডেন্টেশন সহ JSON প্রিটি প্রিন্ট করুনJSON মিনিফায়ারহোয়াইটস্পেস সরিয়ে JSON মিনিফাই ও কম্প্যাক্ট করুনJSON থেকে YAML রূপান্তরকারীJSON কে YAML ফরম্যাটে রূপান্তর করুনJSON থেকে CSVJSON অ্যারেকে CSV ফরম্যাটে রূপান্তর করুনJSON থেকে TypeScriptJSON থেকে TypeScript ইন্টারফেস তৈরি করুনJSON থেকে C# ক্লাসJSON থেকে C# ক্লাস তৈরি করুনJSON থেকে Go StructJSON থেকে Go struct তৈরি করুনJSON থেকে PythonJSON থেকে Python dataclass তৈরি করুনJSON থেকে DartfromJson ও toJson সহ JSON থেকে Dart ক্লাস তৈরি করুন