Skill

Nested JSON এবং Complex Structures

Java Technologies - জেসন (JSON)
105
105

Nested JSON এবং Complex Structures হল JSON ডেটার গুরুত্বপূর্ণ বৈশিষ্ট্য, যেখানে JSON অবজেক্ট বা অ্যারে অন্য একটি অবজেক্ট বা অ্যারে ধারণ করে। এই ধরনের স্ট্রাকচার ওয়েব অ্যাপ্লিকেশন, API, এবং ডেটাবেসে ডেটার জটিলতা এবং সম্পর্ককে সঠিকভাবে প্রতিনিধিত্ব করতে ব্যবহৃত হয়। জাভা (Java) প্রোগ্রামিং ভাষার মাধ্যমে এই ধরনের nested JSON ডেটা প্রসেস করা সহজ, এবং এটি JSON পার্সিং বা সিরিয়ালাইজেশন করতে বিভিন্ন লাইব্রেরি যেমন Jackson বা Gson ব্যবহার করা হয়।

Nested JSON এবং Complex Structures


Nested JSON ডেটার মধ্যে একটি অবজেক্টের ভিতরে অন্য একটি অবজেক্ট বা অ্যারে থাকতে পারে। এর ফলে ডেটা কাঠামো অনেক বেশি জটিল হয়ে ওঠে, যা একটি সার্বিক সম্পর্ক বা ডেটার হায়ারারকিকাল (ধাপানুসারী) গঠন তৈরি করে।

উদাহরণস্বরূপ:

{
    "name": "John",
    "age": 30,
    "address": {
        "street": "123 Main St",
        "city": "New York",
        "postalCode": "10001"
    },
    "phoneNumbers": [
        { "type": "home", "number": "123-456-7890" },
        { "type": "work", "number": "987-654-3210" }
    ]
}

এখানে, address একটি nested JSON object এবং phoneNumbers একটি JSON array যা আরও দুটি অবজেক্ট ধারণ করে।

Java এর মাধ্যমে Nested JSON এবং Complex Structures প্রসেস করা


Jackson এবং Gson লাইব্রেরি ব্যবহার করে Java-তে nested JSON এবং complex JSON structures প্রক্রিয়া করা যায়। নিচে এর উদাহরণ দেখানো হলো।

1. Jackson ব্যবহার করে Nested JSON পার্সিং

Jackson ব্যবহার করে nested JSON ডেটাকে Java অবজেক্টে কনভার্ট এবং সিরিয়ালাইজ করা যায়। প্রথমে Jackson লাইব্রেরি ইনস্টল করতে হবে।

Maven Dependency for Jackson

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.13.1</version>
</dependency>

Nested JSON থেকে Java অবজেক্টে কনভার্ট করা

import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;

public class NestedJsonExample {
    public static void main(String[] args) throws IOException {
        String json = "{\n" +
                      "    \"name\": \"John\",\n" +
                      "    \"age\": 30,\n" +
                      "    \"address\": {\n" +
                      "        \"street\": \"123 Main St\",\n" +
                      "        \"city\": \"New York\",\n" +
                      "        \"postalCode\": \"10001\"\n" +
                      "    },\n" +
                      "    \"phoneNumbers\": [\n" +
                      "        { \"type\": \"home\", \"number\": \"123-456-7890\" },\n" +
                      "        { \"type\": \"work\", \"number\": \"987-654-3210\" }\n" +
                      "    ]\n" +
                      "}";

        // Jackson ObjectMapper এর মাধ্যমে JSON থেকে Java অবজেক্টে কনভার্ট করা
        ObjectMapper objectMapper = new ObjectMapper();
        Person person = objectMapper.readValue(json, Person.class);

        System.out.println(person.getName());  // John
        System.out.println(person.getAddress().getCity());  // New York
        System.out.println(person.getPhoneNumbers().get(0).getNumber());  // 123-456-7890
    }
}

class Person {
    private String name;
    private int age;
    private Address address;
    private List<PhoneNumber> phoneNumbers;

    // Getters and Setters
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    public List<PhoneNumber> getPhoneNumbers() {
        return phoneNumbers;
    }

    public void setPhoneNumbers(List<PhoneNumber> phoneNumbers) {
        this.phoneNumbers = phoneNumbers;
    }
}

class Address {
    private String street;
    private String city;
    private String postalCode;

    // Getters and Setters
    public String getStreet() {
        return street;
    }

    public void setStreet(String street) {
        this.street = street;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getPostalCode() {
        return postalCode;
    }

    public void setPostalCode(String postalCode) {
        this.postalCode = postalCode;
    }
}

class PhoneNumber {
    private String type;
    private String number;

    // Getters and Setters
    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }
}

এখানে, ObjectMapper ব্যবহার করে JSON ডেটাকে Person, Address, এবং PhoneNumber ক্লাসের অবজেক্টে কনভার্ট করা হয়েছে।

Nested JSON থেকে Java অবজেক্টে কনভার্টের পর আউটপুট

John
New York
123-456-7890

2. Gson ব্যবহার করে Nested JSON পার্সিং

Gson লাইব্রেরি ব্যবহার করে JSON ডেটাকে Java অবজেক্টে কনভার্ট করা যেতে পারে।

Maven Dependency for Gson

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.8</version>
</dependency>

Gson ব্যবহার করে Nested JSON থেকে Java অবজেক্টে কনভার্ট করা

import com.google.gson.Gson;
import java.util.List;

public class NestedJsonExample {
    public static void main(String[] args) {
        String json = "{\n" +
                      "    \"name\": \"John\",\n" +
                      "    \"age\": 30,\n" +
                      "    \"address\": {\n" +
                      "        \"street\": \"123 Main St\",\n" +
                      "        \"city\": \"New York\",\n" +
                      "        \"postalCode\": \"10001\"\n" +
                      "    },\n" +
                      "    \"phoneNumbers\": [\n" +
                      "        { \"type\": \"home\", \"number\": \"123-456-7890\" },\n" +
                      "        { \"type\": \"work\", \"number\": \"987-654-3210\" }\n" +
                      "    ]\n" +
                      "}";

        // Gson এর মাধ্যমে JSON থেকে Java অবজেক্টে কনভার্ট করা
        Gson gson = new Gson();
        Person person = gson.fromJson(json, Person.class);

        System.out.println(person.getName());  // John
        System.out.println(person.getAddress().getCity());  // New York
        System.out.println(person.getPhoneNumbers().get(0).getNumber());  // 123-456-7890
    }
}

class Person {
    private String name;
    private int age;
    private Address address;
    private List<PhoneNumber> phoneNumbers;

    // Getters and Setters
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    public List<PhoneNumber> getPhoneNumbers() {
        return phoneNumbers;
    }

    public void setPhoneNumbers(List<PhoneNumber> phoneNumbers) {
        this.phoneNumbers = phoneNumbers;
    }
}

class Address {
    private String street;
    private String city;
    private String postalCode;

    // Getters and Setters
    public String getStreet() {
        return street;
    }

    public void setStreet(String street) {
        this.street = street;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getPostalCode() {
        return postalCode;
    }

    public void setPostalCode(String postalCode) {
        this.postalCode = postalCode;
    }
}

class PhoneNumber {
    private String type;
    private String number;

    // Getters and Setters
    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }
}

এখানে, Gson ব্যবহার করে Person, Address, এবং PhoneNumber অবজেক্টে JSON ডেটা কনভার্ট করা হয়েছে।

Nested JSON থেকে Java অবজেক্টে কনভার্টের পর আউটপুট

John
New York
123-456-7890

Nested JSON এবং Complex Structures এর সুবিধা


  1. ডেটার কাঠামো সঠিকভাবে প্রতিনিধিত্ব: Nested JSON ডেটা জটিল সম্পর্ক এবং সুনির্দিষ্ট কাঠামো উপস্থাপন করতে সাহায্য করে, যা একাধিক স্তরের ডেটা ধারণ করে।
  2. এলগোরিদম ও প্রসেসিং সুবিধা: JSON এর এই কাঠামো Java অবজেক্টে কনভার্ট করার মাধ্যমে সহজে কার্যকরী এলগোরিদম তৈরি করা যায়।
  3. অ্যাপ্লিকেশন পারফরম্যান্স: JSON এর হালকা গঠন এবং দ্রুত পার্সিং সুবিধা দিয়ে ডেটা প্রক্রিয়া দ্রুত করা সম্ভব, বিশেষত ওয়েব অ্যাপ্লিকেশন এবং API ব্যবহারে।

Nested JSON এবং Complex Structures Java এবং অন্যান্য ভাষায় ডেটা প্রসেসিংকে আরও নমনীয় এবং কার্যকরী করে তোলে, যা আধুনিক ওয়েব এবং মাইক্রোসার্ভিস অ্যাপ্লিকেশনগুলিতে অত্যন্ত কার্যকর।

Content added By

Nested JSON এর ধারণা

110
110

JSON (JavaScript Object Notation) একটি হালকা, মানব-পঠনযোগ্য এবং মেশিন-পঠনযোগ্য ডেটা বিনিময় ফরম্যাট। JSON ডেটাতে সাধারণত key-value pair ব্যবহৃত হয়, যা ডেটাকে বিভিন্ন ডাটা টাইপ (যেমন: স্ট্রিং, নাম্বার, অ্যারে, অবজেক্ট) ধারণ করতে সক্ষম করে। Nested JSON হল JSON এর একটি কাঠামো যেখানে একটি JSON অবজেক্ট অন্য একটি অবজেক্টের মধ্যে থাকে, অর্থাৎ একটি অবজেক্টের মধ্যে আরেকটি অবজেক্ট বা অ্যারে থাকতে পারে।

Nested JSON এর ধারণা


Nested JSON এমন একটি JSON অবজেক্ট যেখানে অন্তর্নিহিত (nested) JSON অবজেক্ট বা অ্যারে থাকে। এটি জটিল ডেটা কাঠামো তৈরি করতে ব্যবহৃত হয়। এটি সাধারণত ব্যবহার করা হয় যখন ডেটার মধ্যে সম্পর্কযুক্ত বা সাপেক্ষ তথ্য থাকতে থাকে। উদাহরণস্বরূপ, একটি ব্যবহারকারীর তথ্যের মধ্যে তার ঠিকানা, যোগাযোগের তথ্য, অথবা পূর্ববর্তী কার্যক্রম থাকতে পারে।

Nested JSON উদাহরণ

{
    "name": "John",
    "age": 30,
    "address": {
        "street": "123 Main St",
        "city": "New York",
        "zipcode": "10001"
    },
    "phoneNumbers": [
        {
            "type": "mobile",
            "number": "123-456-7890"
        },
        {
            "type": "home",
            "number": "987-654-3210"
        }
    ]
}

এখানে, address এবং phoneNumbers দুটি nested অবজেক্ট এবং অ্যারে। address একটি অবজেক্ট, যা street, city, এবং zipcode এর মতো কী-ভ্যালু পেয়ার ধারণ করে। phoneNumbers একটি অ্যারে, যেখানে দুটি অবজেক্ট রয়েছে, প্রতিটি ফোন নম্বরের জন্য একটি type এবং number প্রদান করা হয়েছে।


Nested JSON এর ব্যবহার


Nested JSON এমন পরিস্থিতিতে ব্যবহার করা হয় যখন একটি ডেটা কাঠামো অন্যান্য সম্পর্কিত তথ্য ধারণ করে, যেমন:

  1. একাধিক ঠিকানা বা যোগাযোগের তথ্য: যদি একটি ব্যক্তির একাধিক ঠিকানা বা ফোন নম্বর থাকে, তবে আপনি nested JSON ব্যবহার করে এটি সহজেই মডেল করতে পারবেন।
  2. সম্পর্কিত তথ্য: কিছু ডেটা একে অপরের সাথে সম্পর্কিত থাকতে পারে, যেমন একটি পণ্য এবং তার বৈশিষ্ট্য, একজন কর্মী এবং তার কর্মস্থল।

Nested JSON এবং Java Integration


Java তে Nested JSON প্রক্রিয়াজাত করতে Jackson, Gson বা অন্যান্য লাইব্রেরি ব্যবহার করা যায়। নিচে Jackson লাইব্রেরি দিয়ে Nested JSON কিভাবে পার্স করতে হয় তার একটি উদাহরণ দেয়া হলো।

Jackson লাইব্রেরি দিয়ে Nested JSON পার্স করা

Maven Dependency:
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.13.0</version>
</dependency>
Nested JSON কনভার্সন উদাহরণ:
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;

class Address {
    private String street;
    private String city;
    private String zipcode;
    
    // Getter and Setter methods
    public String getStreet() { return street; }
    public void setStreet(String street) { this.street = street; }
    
    public String getCity() { return city; }
    public void setCity(String city) { this.city = city; }
    
    public String getZipcode() { return zipcode; }
    public void setZipcode(String zipcode) { this.zipcode = zipcode; }
}

class PhoneNumber {
    private String type;
    private String number;

    // Getter and Setter methods
    public String getType() { return type; }
    public void setType(String type) { this.type = type; }

    public String getNumber() { return number; }
    public void setNumber(String number) { this.number = number; }
}

class Person {
    private String name;
    private int age;
    private Address address;
    private List<PhoneNumber> phoneNumbers;

    // Getter and Setter methods
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }

    public Address getAddress() { return address; }
    public void setAddress(Address address) { this.address = address; }

    public List<PhoneNumber> getPhoneNumbers() { return phoneNumbers; }
    public void setPhoneNumbers(List<PhoneNumber> phoneNumbers) { this.phoneNumbers = phoneNumbers; }
}

public class NestedJSONExample {
    public static void main(String[] args) {
        try {
            // JSON String with Nested Objects
            String json = "{"
                            + "\"name\": \"John\","
                            + "\"age\": 30,"
                            + "\"address\": {\"street\": \"123 Main St\", \"city\": \"New York\", \"zipcode\": \"10001\"},"
                            + "\"phoneNumbers\": ["
                                + "{\"type\": \"mobile\", \"number\": \"123-456-7890\"},"
                                + "{\"type\": \"home\", \"number\": \"987-654-3210\"}"
                            + "]"
                        + "}";

            // Jackson ObjectMapper
            ObjectMapper objectMapper = new ObjectMapper();

            // JSON to Java object conversion
            Person person = objectMapper.readValue(json, Person.class);

            // Output the nested values
            System.out.println("Name: " + person.getName());
            System.out.println("Age: " + person.getAge());
            System.out.println("Street: " + person.getAddress().getStreet());
            System.out.println("City: " + person.getAddress().getCity());
            System.out.println("Phone Numbers: ");
            for (PhoneNumber phone : person.getPhoneNumbers()) {
                System.out.println(phone.getType() + ": " + phone.getNumber());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

এখানে, Person ক্লাসে Address এবং PhoneNumber নামে দুটি নেস্টেড অবজেক্ট রয়েছে। Jackson ObjectMapper ব্যবহার করে Nested JSON পার্স করা হয়েছে এবং ডেটাকে C# অবজেক্টে রূপান্তর করা হয়েছে।


Nested JSON এর সুবিধা


  1. সম্পর্কিত ডেটা সহজভাবে সংগঠিত করা: Nested JSON ব্যবহার করে সম্পর্কিত ডেটা একসাথে রাখা যায়, যেমন একাধিক ঠিকানা বা ফোন নম্বর।
  2. ডেটার কাঠামো বজায় রাখা: Nested JSON ডেটার কাঠামো ধরে রাখে এবং অ্যাপ্লিকেশন বা সিস্টেমের মধ্যে ডেটা আদান-প্রদান সহজ করে।
  3. সহজে প্রক্রিয়াজাত করা: JSON লাইব্রেরি ব্যবহার করে সহজেই nested JSON ডেটা প্রক্রিয়াজাত করা যায়।

Nested JSON একটি শক্তিশালী এবং বহুল ব্যবহৃত কৌশল যা ডেটাকে আরও সংগঠিত এবং সম্পর্কযুক্ত ভাবে স্টোর করার জন্য ব্যবহৃত হয়। JSON এর সহজ গঠন এবং C# বা Java তে এর সহজ প্রক্রিয়াজাতকরণের কারণে এটি খুবই জনপ্রিয়।

Content added By

Complex JSON Structures পার্স করা এবং প্রক্রিয়াজাত করা

105
105

জেএসপি (JSP) বা Java অ্যাপ্লিকেশনে Complex JSON Structures যেমন অ্যারে এবং অবজেক্টের মধ্যে নেস্টেড (nested) ডেটা পার্স করা এবং প্রক্রিয়াজাত করা খুবই গুরুত্বপূর্ণ। JSON ডেটা সাধারণত সহজ স্ট্রিং এবং নাম্বারের থেকে বেশি জটিল হতে পারে, যেখানে অবজেক্ট এবং অ্যারের কম্বিনেশন থাকে।

এই প্রক্রিয়াটি করার জন্য সাধারণত Jackson বা Gson লাইব্রেরি ব্যবহার করা হয়। আমরা এখানে Jackson ব্যবহার করে Complex JSON Structures পার্স করার এবং প্রক্রিয়াজাত করার উদাহরণ দেখাব।

Complex JSON Structures এর উদাহরণ

ধরা যাক, আমাদের কাছে একটি JSON ডেটা আছে যা অ্যারে, অবজেক্ট এবং নাম্বারসহ বিভিন্ন ধরনের ডেটা ধারণ করে।

{
  "name": "John",
  "age": 30,
  "address": {
    "street": "123 Main St",
    "city": "New York",
    "zip": "10001"
  },
  "phoneNumbers": [
    {
      "type": "mobile",
      "number": "123-456-7890"
    },
    {
      "type": "home",
      "number": "987-654-3210"
    }
  ]
}

এই JSON ডেটাতে একটি অবজেক্ট address, এবং একটি অ্যারে phoneNumbers রয়েছে, যা আরও দুটি অবজেক্ট ধারণ করে।

Jackson ব্যবহার করে Complex JSON Structures পার্স করা


স্টেপ ১: Jackson লাইব্রেরি যোগ করা

প্রথমে আপনার Maven প্রকল্পে Jackson লাইব্রেরি যোগ করুন:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.12.3</version>
</dependency>

স্টেপ ২: Java ক্লাস তৈরি করা

এখন আমরা JSON ডেটাকে Java অবজেক্টে কনভার্ট করার জন্য Java ক্লাস তৈরি করব।

import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;

class Address {
    private String street;
    private String city;
    private String zip;

    // Getters and Setters
    public String getStreet() { return street; }
    public void setStreet(String street) { this.street = street; }

    public String getCity() { return city; }
    public void setCity(String city) { this.city = city; }

    public String getZip() { return zip; }
    public void setZip(String zip) { this.zip = zip; }
}

class PhoneNumber {
    private String type;
    private String number;

    // Getters and Setters
    public String getType() { return type; }
    public void setType(String type) { this.type = type; }

    public String getNumber() { return number; }
    public void setNumber(String number) { this.number = number; }
}

class Person {
    private String name;
    private int age;
    private Address address;
    
    @JsonProperty("phoneNumbers")  // To handle the JSON array field
    private List<PhoneNumber> phoneNumbers;

    // Getters and Setters
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }

    public Address getAddress() { return address; }
    public void setAddress(Address address) { this.address = address; }

    public List<PhoneNumber> getPhoneNumbers() { return phoneNumbers; }
    public void setPhoneNumbers(List<PhoneNumber> phoneNumbers) { this.phoneNumbers = phoneNumbers; }
}

এখানে:

  • Address ক্লাসের মধ্যে street, city, এবং zip আছে, যা JSON অবজেক্ট address এর মান প্রতিনিধিত্ব করে।
  • PhoneNumber ক্লাসটি JSON অ্যারের প্রতিটি অবজেক্টের জন্য তৈরি করা হয়েছে (যেখানে type এবং number ফিল্ড আছে)।
  • Person ক্লাসে name, age, address, এবং phoneNumbers রয়েছে। phoneNumbers হল একটি List

স্টেপ ৩: JSON ডেটা পার্স করা (Deserialization)

এখন আমরা JSON ডেটা Java অবজেক্টে কনভার্ট (পার্স) করব।

import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;

public class JacksonComplexJsonExample {
    public static void main(String[] args) throws IOException {
        String jsonString = "{\n" +
                "  \"name\": \"John\",\n" +
                "  \"age\": 30,\n" +
                "  \"address\": {\n" +
                "    \"street\": \"123 Main St\",\n" +
                "    \"city\": \"New York\",\n" +
                "    \"zip\": \"10001\"\n" +
                "  },\n" +
                "  \"phoneNumbers\": [\n" +
                "    {\n" +
                "      \"type\": \"mobile\",\n" +
                "      \"number\": \"123-456-7890\"\n" +
                "    },\n" +
                "    {\n" +
                "      \"type\": \"home\",\n" +
                "      \"number\": \"987-654-3210\"\n" +
                "    }\n" +
                "  ]\n" +
                "}";

        ObjectMapper objectMapper = new ObjectMapper();

        // JSON to Java object
        Person person = objectMapper.readValue(jsonString, Person.class);

        // Printing parsed data
        System.out.println("Name: " + person.getName());
        System.out.println("Age: " + person.getAge());
        System.out.println("Street: " + person.getAddress().getStreet());
        System.out.println("Phone Numbers:");
        for (PhoneNumber phoneNumber : person.getPhoneNumbers()) {
            System.out.println("  Type: " + phoneNumber.getType() + ", Number: " + phoneNumber.getNumber());
        }
    }
}

এখানে:

  • ObjectMapper এর মাধ্যমে JSON স্ট্রিংটিকে Person অবজেক্টে রূপান্তর করা হচ্ছে।
  • person.getName(), person.getAge(), person.getAddress().getStreet(), এবং person.getPhoneNumbers() ব্যবহার করে পার্স করা ডেটা অ্যাক্সেস করা হচ্ছে।

আউটপুট:

Name: John
Age: 30
Street: 123 Main St
Phone Numbers:
  Type: mobile, Number: 123-456-7890
  Type: home, Number: 987-654-3210

JSON ডেটা প্রক্রিয়াজাত করা


পার্স করার পর, আপনি JSON ডেটার যেকোনো অংশে প্রক্রিয়াকরণ করতে পারেন, যেমন:

  1. নতুন ডেটা যোগ করা: আপনি JSON অবজেক্টে নতুন তথ্য যুক্ত করতে পারেন।
  2. ডেটা পরিবর্তন করা: আপনি পার্স করা ডেটা পরিবর্তন করতে পারেন (যেমন, নাম বা ঠিকানা আপডেট করা)।
  3. ফিল্টারিং: আপনি JSON অবজেক্টে ফিল্টার প্রয়োগ করে নির্দিষ্ট ডেটা বের করতে পারেন।

উদাহরণস্বরূপ, আপনি যদি ফোন নাম্বার পরিবর্তন করতে চান, তাহলে আপনি person.getPhoneNumbers() এর মাধ্যমে ফোন নম্বর পরিবর্তন করতে পারেন।


সারাংশ


Complex JSON Structures পার্স এবং প্রক্রিয়াজাত করার জন্য Jackson একটি শক্তিশালী এবং জনপ্রিয় লাইব্রেরি। এখানে, JSON ডেটার মধ্যে অবজেক্ট এবং অ্যারে থাকলে, Jackson এর মাধ্যমে সহজেই পার্স এবং প্রক্রিয়াজাত করা সম্ভব। JSON ডেটা পার্স করার জন্য Java ক্লাস তৈরি করতে হয় এবং তারপর ObjectMapper ব্যবহার করে JSON কে Java অবজেক্টে রূপান্তর করতে হয়। JSON ডেটা প্রক্রিয়াজাত করা Java কোডের মাধ্যমে বিভিন্ন কার্যক্রম করা যায়, যেমন ডেটা পরিবর্তন বা নতুন তথ্য যুক্ত করা।

Content added By

Recursive Techniques ব্যবহার করে Nested JSON Handle করা

126
126

Nested JSON ডেটা কাঠামো একাধিক লেভেলে ডেটা ধারণ করে, যেখানে একটি JSON অবজেক্টের মধ্যে আরেকটি JSON অবজেক্ট থাকতে পারে। JSON এর এই ধরনের কাঠামোকে প্রক্রিয়াকরণ করার জন্য recursive techniques ব্যবহার করা যেতে পারে। Recursive techniques হল এমন একটি পদ্ধতি যেখানে একটি ফাংশন নিজেই নিজেকে কল করে, যা ডেটা কাঠামোর প্রতি স্তরের জন্য কার্যকরী হতে পারে।

Java তে Nested JSON Handle করতে Jackson বা Gson লাইব্রেরি ব্যবহার করা হয়। এই ধরনের ডেটা পার্স বা সিরিয়ালাইজ করার সময় recursive techniques ব্যবহার করলে, আমরা সহজে এবং দক্ষতার সাথে নেস্টেড ডেটা অ্যাক্সেস করতে পারি।

Nested JSON Example


ধরা যাক, আমাদের একটি JSON ডেটা আছে যা Nested অবজেক্ট এবং অ্যারে ধারণ করে। এখানে একটি উদাহরণ দেখানো হচ্ছে:

{
  "name": "John Doe",
  "address": {
    "street": "123 Main St",
    "city": "New York",
    "zipcode": {
      "code": "10001",
      "area": "Downtown"
    }
  },
  "phoneNumbers": [
    {"type": "home", "number": "123-456-7890"},
    {"type": "work", "number": "987-654-3210"}
  ]
}

এই JSON এর মধ্যে address একটি nested অবজেক্ট, এবং phoneNumbers একটি অ্যারে যা nested অবজেক্ট ধারণ করে। আমরা যদি এই ডেটা C# বা Java তে handle করতে চাই, তাহলে recursive techniques ব্যবহার করতে হবে, বিশেষ করে nested অবজেক্টগুলোকে প্রক্রিয়া করার জন্য।

Jackson ব্যবহার করে Recursive Techniques দিয়ে Nested JSON Handle করা


Jackson লাইব্রেরি Java তে JSON ডেটা প্রসেস করার জন্য একটি জনপ্রিয় টুল। Jackson ব্যবহার করে আমরা JSON স্ট্রিংকে Java Object-এ রূপান্তর (Deserialization) এবং Java Object-কে JSON স্ট্রিং-এ রূপান্তর (Serialization) করতে পারি।

১. Jackson এর মাধ্যমে Nested JSON Handle করা

ধরা যাক, আমরা উল্লিখিত JSON ডেটাকে Java Object-এ রূপান্তর করতে চাই এবং recursive পদ্ধতিতে নেস্টেড অবজেক্ট এবং অ্যারে অ্যাক্সেস করতে চাই।

Java ক্লাস তৈরি করা:
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.util.List;
import java.util.Map;

public class Person {
    private String name;
    private Address address;
    private List<PhoneNumber> phoneNumbers;

    // Getter and Setter methods
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    public List<PhoneNumber> getPhoneNumbers() {
        return phoneNumbers;
    }

    public void setPhoneNumbers(List<PhoneNumber> phoneNumbers) {
        this.phoneNumbers = phoneNumbers;
    }

    public static class Address {
        private String street;
        private String city;
        private Zipcode zipcode;

        // Getter and Setter methods
        public String getStreet() {
            return street;
        }

        public void setStreet(String street) {
            this.street = street;
        }

        public String getCity() {
            return city;
        }

        public void setCity(String city) {
            this.city = city;
        }

        public Zipcode getZipcode() {
            return zipcode;
        }

        public void setZipcode(Zipcode zipcode) {
            this.zipcode = zipcode;
        }
    }

    public static class Zipcode {
        private String code;
        private String area;

        // Getter and Setter methods
        public String getCode() {
            return code;
        }

        public void setCode(String code) {
            this.code = code;
        }

        public String getArea() {
            return area;
        }

        public void setArea(String area) {
            this.area = area;
        }
    }

    public static class PhoneNumber {
        private String type;
        private String number;

        // Getter and Setter methods
        public String getType() {
            return type;
        }

        public void setType(String type) {
            this.type = type;
        }

        public String getNumber() {
            return number;
        }

        public void setNumber(String number) {
            this.number = number;
        }
    }

    public static void main(String[] args) throws Exception {
        String jsonString = "{\"name\": \"John Doe\", \"address\": {\"street\": \"123 Main St\", \"city\": \"New York\", \"zipcode\": {\"code\": \"10001\", \"area\": \"Downtown\"}}, \"phoneNumbers\": [{\"type\": \"home\", \"number\": \"123-456-7890\"}, {\"type\": \"work\", \"number\": \"987-654-3210\"}]}";

        // Jackson ObjectMapper ব্যবহার করে JSON থেকে Java Object এ রূপান্তর
        ObjectMapper objectMapper = new ObjectMapper();
        Person person = objectMapper.readValue(jsonString, Person.class);

        // Output nested values
        System.out.println("Name: " + person.getName());
        System.out.println("Street: " + person.getAddress().getStreet());
        System.out.println("City: " + person.getAddress().getCity());
        System.out.println("Zip Code: " + person.getAddress().getZipcode().getCode());
        System.out.println("Area: " + person.getAddress().getZipcode().getArea());
        for (PhoneNumber phone : person.getPhoneNumbers()) {
            System.out.println(phone.getType() + " Phone: " + phone.getNumber());
        }
    }
}
Explanation:
  • Person ক্লাসের মধ্যে address এবং phoneNumbers ফিল্ড গুলো nested JSON অবজেক্ট এবং অ্যারের জন্য ব্যবহৃত হয়েছে।
  • Address এবং Zipcode ক্লাসে nested অবজেক্টগুলোর জন্য getter এবং setter মেথড রাখা হয়েছে।
  • ObjectMapper ব্যবহার করে JSON স্ট্রিং থেকে Person অবজেক্টে রূপান্তর করা হয়েছে।
  • JSON ডেটা থেকে nested অবজেক্ট এবং অ্যারে এর মান অ্যাক্সেস করা হয়েছে।
আউটপুট:
Name: John Doe
Street: 123 Main St
City: New York
Zip Code: 10001
Area: Downtown
home Phone: 123-456-7890
work Phone: 987-654-3210

২. Recursive Techniques ব্যবহার করে Dynamic Nested JSON Handle করা


যদি JSON ডেটার কাঠামো ডায়নামিক হয় এবং জানা না থাকে যে কত লেভেল পর্যন্ত nested অবজেক্ট থাকতে পারে, তখন recursive techniques ব্যবহার করা দরকার। এখানে একটি উদাহরণ দেওয়া হলো যেখানে JSON অবজেক্টকে রিকার্সিভভাবে প্রক্রিয়া করা হয়েছে।

উদাহরণ:

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.IOException;

public class RecursiveJsonExample {
    public static void main(String[] args) throws IOException {
        String jsonString = "{\"name\": \"John Doe\", \"address\": {\"street\": \"123 Main St\", \"city\": \"New York\", \"zipcode\": {\"code\": \"10001\", \"area\": \"Downtown\"}}, \"phoneNumbers\": [{\"type\": \"home\", \"number\": \"123-456-7890\"}, {\"type\": \"work\", \"number\": \"987-654-3210\"}]}";

        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode rootNode = objectMapper.readTree(jsonString);

        // Recursive method to print all keys and values
        printJsonNode(rootNode);
    }

    public static void printJsonNode(JsonNode node) {
        if (node.isObject()) {
            node.fieldNames().forEachRemaining(fieldName -> {
                JsonNode childNode = node.get(fieldName);
                System.out.println(fieldName + ": " + childNode.asText());
                // Recursively handle nested objects
                if (childNode.isObject() || childNode.isArray()) {
                    printJsonNode(childNode);
                }
            });
        } else if (node.isArray()) {
            for (JsonNode arrayElement : node) {
                printJsonNode(arrayElement);
            }
        }
    }
}

Explanation:

  • JsonNode ব্যবহার করা হয়েছে যাতে ডাইনামিকভাবে JSON স্ট্রাকচার হ্যান্ডেল করা যায়।
  • printJsonNode মেথডটি রিকার্সিভ পদ্ধতিতে JSON অবজেক্ট এবং অ্যারে গুলি প্রক্রিয়া করছে।

সারাংশ


Recursive techniques ব্যবহার করে nested JSON ডেটা হ্যান্ডলিং Java তে খুবই কার্যকরী। Jackson লাইব্রেরি ব্যবহার করে সহজে nested JSON অবজেক্ট এবং অ্যারে গুলি প্রক্রিয়া করা যায়। এই ধরনের ডেটাকে সঠিকভাবে অ্যাক্সেস করতে রিকার্সিভ পদ্ধতি খুবই উপকারী, বিশেষ করে যখন JSON স্ট্রাকচার ডায়নামিক বা জটিল হয়।

Content added By

Practical উদাহরণ: Nested JSON Data Parsing

80
80

নেস্টেড JSON ডেটা (Nested JSON Data) এমন একটি JSON অবজেক্ট যা অন্যান্য JSON অবজেক্ট বা অ্যারের মধ্যে অন্তর্ভুক্ত থাকে। এই ধরনের ডেটা পার্স করার জন্য আপনাকে JSON এর মধ্যে বিভিন্ন স্তরের ডেটা অ্যাক্সেস করতে হবে। Java-তে Nested JSON Data পার্স করার জন্য সাধারণত JSONObject এবং JSONArray ক্লাস ব্যবহৃত হয়।

এখানে একটি নেস্টেড JSON ডেটা এবং সেটি Java ব্যবহার করে পার্স করার প্রক্রিয়া দেখানো হবে।

১. নেস্টেড JSON ডেটা উদাহরণ

ধরা যাক আমাদের কাছে একটি নেস্টেড JSON ডেটা রয়েছে যা একজন ছাত্রের তথ্য এবং তার বিষয়ের তালিকা ধারণ করে।

{
    "student": {
        "name": "John Doe",
        "age": 21,
        "courses": [
            {
                "course_name": "Mathematics",
                "credits": 4
            },
            {
                "course_name": "Computer Science",
                "credits": 3
            }
        ]
    }
}

এই JSON ডেটায়:

  • student একটি অবজেক্ট, যার মধ্যে name, age এবং courses নামে একটি অ্যারে রয়েছে।
  • courses অ্যারে তে দুটি অবজেক্ট রয়েছে, প্রতিটি অবজেক্টে course_name এবং credits রয়েছে।

২. Java কোড ব্যবহার করে Nested JSON পার্স করা

এখন, Java-তে JSON পার্স করতে আমরা org.json লাইব্রেরি ব্যবহার করবো। এই লাইব্রেরি ব্যবহার করে আমরা JSON ডেটা পার্স এবং অ্যাক্সেস করতে পারি।

২.১. প্রথমে লাইব্রেরি যোগ করা

আপনার প্রজেক্টে json.jar লাইব্রেরি অন্তর্ভুক্ত করতে হবে। আপনি Maven ব্যবহার করলে নিচের ডিপেনডেন্সি যোগ করতে পারেন:

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20210307</version>
</dependency>

২.২. Java কোড

import org.json.JSONArray;
import org.json.JSONObject;

public class NestedJsonParsing {
    public static void main(String[] args) {
        // Nested JSON String
        String jsonData = "{"
                + "\"student\": {"
                + "\"name\": \"John Doe\","
                + "\"age\": 21,"
                + "\"courses\": ["
                + "{\"course_name\": \"Mathematics\", \"credits\": 4},"
                + "{\"course_name\": \"Computer Science\", \"credits\": 3}"
                + "]"
                + "}"
                + "}";

        // JSON String থেকে JSONObject তৈরি করা
        JSONObject jsonObject = new JSONObject(jsonData);

        // student অবজেক্ট অ্যাক্সেস করা
        JSONObject student = jsonObject.getJSONObject("student");

        // student এর name এবং age অ্যাক্সেস করা
        String name = student.getString("name");
        int age = student.getInt("age");

        System.out.println("Student Name: " + name);
        System.out.println("Student Age: " + age);

        // courses অ্যারে অ্যাক্সেস করা
        JSONArray courses = student.getJSONArray("courses");

        // courses অ্যারে থেকে প্রতিটি course অ্যাক্সেস করা
        for (int i = 0; i < courses.length(); i++) {
            JSONObject course = courses.getJSONObject(i);
            String courseName = course.getString("course_name");
            int credits = course.getInt("credits");

            System.out.println("Course " + (i + 1) + ": " + courseName + ", Credits: " + credits);
        }
    }
}

২.৩. কোডের ব্যাখ্যা:

  • JSONObject jsonObject = new JSONObject(jsonData);: JSON স্ট্রিং থেকে একটি JSONObject তৈরি করা হচ্ছে।
  • getJSONObject("student"): "student" নামক মূল অবজেক্টটি অ্যাক্সেস করা হচ্ছে।
  • getString("name") এবং getInt("age"): student অবজেক্টের name এবং age ভ্যালু আনা হচ্ছে।
  • JSONArray courses = student.getJSONArray("courses");: courses নামক অ্যারে অ্যাক্সেস করা হচ্ছে।
  • courses.getJSONObject(i): courses অ্যারের প্রতিটি অবজেক্ট থেকে course_name এবং credits ভ্যালু সংগ্রহ করা হচ্ছে।

২.৪. আউটপুট:

Student Name: John Doe
Student Age: 21
Course 1: Mathematics, Credits: 4
Course 2: Computer Science, Credits: 3

৩. সারাংশ


এটি একটি সাধারণ উদাহরণ ছিল যেখানে একটি নেস্টেড JSON ডেটা থেকে Java ব্যবহার করে ডেটা পার্স করা হয়েছে। আমরা JSONObject এবং JSONArray ব্যবহার করে নেস্টেড JSON অবজেক্ট এবং অ্যারে থেকে তথ্য অ্যাক্সেস করেছি।

  • JSONObject: JSON অবজেক্টের মান অ্যাক্সেস করতে ব্যবহৃত হয়।
  • JSONArray: JSON অ্যারে থেকে ডেটা অ্যাক্সেস করতে ব্যবহৃত হয়।

এই ধরনের JSON পার্সিং আপনাকে যেকোনো নেস্টেড JSON স্ট্রাকচার থেকে তথ্য নিষ্কাশন করতে সাহায্য করবে, যা বেশিরভাগ আধুনিক ওয়েব সার্ভিসে ব্যবহৃত হয়।

Content added By
Promotion