JSON.simple এর মাধ্যমে Nested JSON হ্যান্ডলিং

জেসন.সিম্পল (Json.Simple) - Java Technologies

414

Nested JSON হল JSON ফরম্যাটের এমন একটি ডেটা স্ট্রাকচার যেখানে একটি JSON অবজেক্ট বা অ্যারে অন্য একটি JSON অবজেক্ট বা অ্যারে ধারণ করে। এটি ডেটাকে আরও সংগঠিত এবং কাঠামোবদ্ধভাবে উপস্থাপন করতে ব্যবহৃত হয়। JSON.simple লাইব্রেরি ব্যবহার করে আপনি সহজেই nested JSON হ্যান্ডল করতে পারেন, যেমন একটি JSON অবজেক্টের মধ্যে অন্য JSON অবজেক্ট বা অ্যারে থাকা।

এখানে, আমরা দেখব কিভাবে JSON.simple ব্যবহার করে nested JSON ডেটাকে পার্স এবং ম্যানিপুলেট করা যায়।


Nested JSON উদাহরণ

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

{
  "name": "John Doe",
  "age": 30,
  "address": {
    "street": "123 Main St",
    "city": "New York",
    "zipcode": "10001"
  },
  "isStudent": false
}

এখানে, "address" একটি নেস্টেড JSON অবজেক্ট যা street, city, এবং zipcode কীগুলির মান ধারণ করছে।


JSON.simple ব্যবহার করে Nested JSON হ্যান্ডলিং

1. JSON String থেকে Nested JSON পড়া

আমরা JSON.simple ব্যবহার করে উপরের JSON স্ট্রিংটি পার্স করব এবং নেস্টেড অবজেক্টের মান বের করব।

import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import java.io.FileReader;
import java.io.IOException;

public class NestedJsonHandlingExample {
    public static void main(String[] args) {
        // JSON String
        String jsonString = "{\"name\":\"John Doe\",\"age\":30,\"address\":{\"street\":\"123 Main St\",\"city\":\"New York\",\"zipcode\":\"10001\"},\"isStudent\":false}";

        // JSONParser তৈরি করা
        JSONParser parser = new JSONParser();

        try {
            // JSON স্ট্রিং প্যার্স করে JSONObject তে রূপান্তর করা
            JSONObject jsonObject = (JSONObject) parser.parse(jsonString);

            // Nested JSON Object (address) বের করা
            JSONObject address = (JSONObject) jsonObject.get("address");

            // Nested JSON Object থেকে মান বের করা
            String street = (String) address.get("street");
            String city = (String) address.get("city");
            String zipcode = (String) address.get("zipcode");

            // মান প্রিন্ট করা
            System.out.println("Name: " + jsonObject.get("name"));
            System.out.println("Age: " + jsonObject.get("age"));
            System.out.println("Street: " + street);
            System.out.println("City: " + city);
            System.out.println("Zipcode: " + zipcode);
            System.out.println("Is Student: " + jsonObject.get("isStudent"));
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  • প্রথমে JSONParser ব্যবহার করে JSON স্ট্রিংটি পার্স করা হয়েছে।
  • তারপর jsonObject.get("address") ব্যবহার করে নেস্টেড "address" অবজেক্টটি পাওয়া গেছে।
  • address অবজেক্ট থেকে street, city, এবং zipcode মানগুলি বের করা হয়েছে।
  • অবশেষে, সব মান কনসোল-এ প্রিন্ট করা হয়েছে।

Output:

Name: John Doe
Age: 30
Street: 123 Main St
City: New York
Zipcode: 10001
Is Student: false

2. Nested JSON লেখার উদাহরণ

এখন আমরা একটি nested JSON অবজেক্ট তৈরি করে সেটি একটি ফাইলে লিখব। আমরা FileWriter ব্যবহার করে এটি JSON ফরম্যাটে সংরক্ষণ করব।

import org.json.simple.JSONObject;
import java.io.FileWriter;
import java.io.IOException;

public class NestedJsonWriteExample {
    public static void main(String[] args) {
        // Outer JSON Object
        JSONObject person = new JSONObject();
        person.put("name", "John Doe");
        person.put("age", 30);
        person.put("isStudent", false);

        // Inner JSON Object (address)
        JSONObject address = new JSONObject();
        address.put("street", "123 Main St");
        address.put("city", "New York");
        address.put("zipcode", "10001");

        // Add the inner JSON object to the outer JSON object
        person.put("address", address);

        // Write the JSON Object to a file
        try (FileWriter file = new FileWriter("person.json")) {
            file.write(person.toJSONString());
            System.out.println("Successfully written nested JSON object to file.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  • একটি outer JSON object তৈরি করা হয়েছে (যার মধ্যে name, age, isStudent রয়েছে)।
  • একটি inner JSON object (address) তৈরি করা হয়েছে, যা street, city, এবং zipcode ধারণ করছে।
  • inner JSON object (address) কে outer JSON object (person) এর মধ্যে রাখা হয়েছে।
  • তারপর FileWriter ব্যবহার করে JSON অবজেক্টটি একটি ফাইলে লিখা হয়েছে।

Output (person.json):

{
  "name": "John Doe",
  "age": 30,
  "address": {
    "street": "123 Main St",
    "city": "New York",
    "zipcode": "10001"
  },
  "isStudent": false
}

3. Nested JSON Array হ্যান্ডলিং

ধরা যাক, আমরা একটি JSON অ্যারে (যেখানে প্রতিটি আইটেম একটি অবজেক্ট) পড়তে চাই। নিচে একটি উদাহরণ দেওয়া হলো:

Nested JSON Array Example:

[
  {
    "name": "John",
    "age": 30,
    "address": {
      "street": "123 Main St",
      "city": "New York",
      "zipcode": "10001"
    }
  },
  {
    "name": "Jane",
    "age": 25,
    "address": {
      "street": "456 Elm St",
      "city": "Los Angeles",
      "zipcode": "90001"
    }
  }
]

Nested JSON Array থেকে ডেটা পড়া

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import java.io.FileReader;
import java.io.IOException;

public class NestedJsonArrayReadExample {
    public static void main(String[] args) {
        // JSON Array স্ট্রিং
        String jsonArrayString = "[{\"name\":\"John\",\"age\":30,\"address\":{\"street\":\"123 Main St\",\"city\":\"New York\",\"zipcode\":\"10001\"}},"
                + "{\"name\":\"Jane\",\"age\":25,\"address\":{\"street\":\"456 Elm St\",\"city\":\"Los Angeles\",\"zipcode\":\"90001\"}}]";

        // JSONParser তৈরি করা
        JSONParser parser = new JSONParser();

        try {
            // JSON Array পার্স করা
            JSONArray jsonArray = (JSONArray) parser.parse(jsonArrayString);

            // JSON Array থেকে অবজেক্ট বের করা
            for (Object obj : jsonArray) {
                JSONObject person = (JSONObject) obj;

                // Nested JSON Object (address) বের করা
                JSONObject address = (JSONObject) person.get("address");

                // Nested JSON Object থেকে মান বের করা
                String name = (String) person.get("name");
                int age = ((Long) person.get("age")).intValue();  // Convert Long to int
                String street = (String) address.get("street");
                String city = (String) address.get("city");
                String zipcode = (String) address.get("zipcode");

                // মান প্রিন্ট করা
                System.out.println("Name: " + name);
                System.out.println("Age: " + age);
                System.out.println("Street: " + street);
                System.out.println("City: " + city);
                System.out.println("Zipcode: " + zipcode);
                System.out.println();
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

Output:

Name: John
Age: 30
Street: 123 Main St
City: New York
Zipcode: 10001

Name: Jane
Age: 25
Street: 456 Elm St
City: Los Angeles
Zipcode: 90001

  1. Nested JSON ডেটা JSON ফরম্যাটের মধ্যে অন্য JSON অবজেক্ট বা অ্যারে ধারণ করতে ব্যবহৃত হয়।
  2. JSON.simple লাইব্রেরি ব্যবহার করে আপনি সহজেই Nested JSON পার্স এবং ম্যানিপুলেট করতে পারেন।
  3. JSONObject ব্যবহার করে নেস্টেড অবজেক্টের মধ্যে ডেটা অ্যাক্সেস করা যায় এবং JSONArray ব্যবহার করে নেস্টেড অ্যারে থেকে ডেটা পড়া যায়।
  4. JSON থেকে ডেটা পার্স এবং লেখার জন্য JSONParser, FileWriter, এবং JSONObject ব্যবহার করা হয়।

JSON.simple লাইব্রেরি দিয়ে nested JSON ডেটা হ্যান্ডলিং খুবই সহজ এবং কার্যকরী, যা Java প্রোগ্রামে JSON ডেটা পরিচালনার জন্য একটি জনপ্রিয় পদ্ধতি।

Content added By

JSON.simple লাইব্রেরি ব্যবহার করে আপনি সহজে Nested JSON Object এবং JSON Array হ্যান্ডল করতে পারেন। Nested JSON Object হল একটি JSON অবজেক্ট যা অন্য JSON অবজেক্ট ধারণ করে, এবং JSON Array হল এমন একটি ডেটা স্ট্রাকচার যা একাধিক মান ধারণ করে (যেমন স্ট্রিং, সংখ্যা, অবজেক্ট, ইত্যাদি)।

এখানে আমরা Nested JSON Object এবং JSON Array হ্যান্ডল করার কিছু উদাহরণ দেখব।


1. Nested JSON Object এবং JSON Array তৈরি করা

ধরা যাক, আমাদের একটি Person অবজেক্ট আছে, যার মধ্যে একটি Address অবজেক্ট (Nested Object) এবং একটি Phone Numbers অ্যারে (JSON Array) রয়েছে। নিচে একটি JSON স্ট্রিং দেওয়া হলো যেটি এই কাঠামোটি অনুসরণ করে:

JSON স্ট্রিং (Nested Object এবং JSON Array)

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

এখানে, address একটি nested JSON object এবং phoneNumbers একটি JSON array


2. Nested JSON Object এবং JSON Array Parsing (Deserialization)

এখন, আমরা JSON.simple ব্যবহার করে উপরের JSON স্ট্রিংটি Java Object এ রূপান্তর (deserialize) করব এবং এর ভিতরের nested object এবং array গুলি অ্যাক্সেস করব।

Java কোড: Nested JSON Object এবং JSON Array Parsing

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

public class JsonDeserializationExample {
    public static void main(String[] args) {
        // JSON স্ট্রিং (Nested Object এবং JSON Array সহ)
        String jsonString = "{"
                + "\"name\":\"John Doe\","
                + "\"age\":30,"
                + "\"address\":{"
                + "\"street\":\"123 Main St\","
                + "\"city\":\"New York\","
                + "\"zipcode\":\"10001\""
                + "},"
                + "\"phoneNumbers\":[\"123-456-7890\", \"987-654-3210\"]"
                + "}";

        // JSONParser ব্যবহার করে JSON স্ট্রিং পার্স করা
        JSONParser parser = new JSONParser();
        
        try {
            // JSON স্ট্রিং পার্স করে JSONObject তে রূপান্তর করা
            JSONObject jsonObject = (JSONObject) parser.parse(jsonString);

            // Nested JSON Object (address) থেকে মান বের করা
            JSONObject address = (JSONObject) jsonObject.get("address");
            String street = (String) address.get("street");
            String city = (String) address.get("city");
            String zipcode = (String) address.get("zipcode");

            // JSON Array (phoneNumbers) থেকে মান বের করা
            JSONArray phoneNumbers = (JSONArray) jsonObject.get("phoneNumbers");
            String phone1 = (String) phoneNumbers.get(0);
            String phone2 = (String) phoneNumbers.get(1);

            // JSON Object থেকে অন্য ফিল্ডগুলি বের করা
            String name = (String) jsonObject.get("name");
            long age = (long) jsonObject.get("age");

            // ফলাফল প্রিন্ট করা
            System.out.println("Name: " + name);
            System.out.println("Age: " + age);
            System.out.println("Address: " + street + ", " + city + ", " + zipcode);
            System.out.println("Phone Numbers: " + phone1 + ", " + phone2);

        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  1. JSONParser: JSON স্ট্রিংটিকে পার্স করতে JSONParser ব্যবহার করা হয়েছে।
  2. JSONObject: JSON অবজেক্টে ডেটা পার্স করার জন্য JSONObject ব্যবহার করা হয়েছে।
  3. JSONArray: JSON অ্যারে থেকে ডেটা বের করতে JSONArray ব্যবহার করা হয়েছে।
  4. Nested Object: address নামক অবজেক্টে থাকা ডেটা বের করতে আমরা get() মেথড ব্যবহার করেছি এবং তা একটি নতুন JSONObject এ কাস্ট করা হয়েছে।
  5. Array Access: phoneNumbers অ্যারে থেকে ফোন নম্বর বের করার জন্য অ্যারে get() মেথড ব্যবহার করা হয়েছে।

Output:

Name: John Doe
Age: 30
Address: 123 Main St, New York, 10001
Phone Numbers: 123-456-7890, 987-654-3210

3. Nested JSON Object এবং JSON Array তৈরি করা এবং JSON ফাইলে লেখা (Serialization)

এখন, আমরা দেখব কিভাবে Nested JSON Object এবং JSON Array তৈরি করা যায় এবং তা JSON ফাইলে লেখা যায়।

Java কোড: Nested JSON Object এবং JSON Array ফাইলে লেখা

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import java.io.FileWriter;
import java.io.IOException;

public class JsonSerializationExample {
    public static void main(String[] args) {
        // Nested JSON Object তৈরি করা
        JSONObject address = new JSONObject();
        address.put("street", "123 Main St");
        address.put("city", "New York");
        address.put("zipcode", "10001");

        // JSON Array তৈরি করা
        JSONArray phoneNumbers = new JSONArray();
        phoneNumbers.add("123-456-7890");
        phoneNumbers.add("987-654-3210");

        // Outer JSON Object তৈরি করা
        JSONObject person = new JSONObject();
        person.put("name", "John Doe");
        person.put("age", 30);
        person.put("address", address);  // Nested Object
        person.put("phoneNumbers", phoneNumbers);  // JSON Array

        // JSON Object ফাইলে লেখা
        try (FileWriter file = new FileWriter("person.json")) {
            file.write(person.toJSONString());
            System.out.println("Successfully written JSON object to file.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  1. Nested JSON Object: প্রথমে একটি address অবজেক্ট তৈরি করা হয়েছে, যা একটি নেস্টেড JSON অবজেক্ট।
  2. JSON Array: পরে একটি phoneNumbers অ্যারে তৈরি করা হয়েছে এবং এতে ফোন নম্বর যোগ করা হয়েছে।
  3. Outer JSON Object: সবকিছু একটি person নামক প্রধান JSON অবজেক্টে যোগ করা হয়েছে।
  4. FileWriter: সবশেষে, person অবজেক্টটি person.json ফাইলে লেখা হয়েছে।

Output File (person.json):

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

  • Nested JSON Object এবং JSON Array এর মাধ্যমে আপনি জটিল ডেটা স্ট্রাকচার তৈরি করতে পারেন এবং JSON.simple লাইব্রেরি ব্যবহার করে সহজে JSON ডেটা পড়া এবং লেখা করতে পারেন।
  • JSONObject এবং JSONArray ব্যবহার করে আপনি JSON অবজেক্টের ভিতরে অন্য অবজেক্ট এবং অ্যারে রাখতে পারবেন, এবং সহজে সেই ডেটা পার্স বা সিরিয়ালাইজ করতে পারবেন।
  • এই লাইব্রেরি JSON ডেটা ম্যানিপুলেশন এবং ফাইল পরিচালনার জন্য একটি সহজ এবং কার্যকরী উপায় সরবরাহ করে।

JSON.simple লাইব্রেরি আপনাকে JSON ডেটার সাথে কাজ করতে দ্রুত এবং কার্যকরভাবে সাহায্য করে।

Content added By

JSON.simple লাইব্রেরি ব্যবহার করে JSONObject এর ভিতরে JSONArray রাখা এবং এর বিপরীত প্রক্রিয়াটি খুবই সাধারণ। JSON এ JSONArray হলো একাধিক মান ধারণ করতে সক্ষম একটি অর্ডারড তালিকা এবং JSONObject হলো কী-মান পেয়ার ধারণকারী একটি অর্ডারড ডেটা স্ট্রাকচার।

এখানে আমরা দেখব কিভাবে JSONObject এর ভিতরে JSONArray রাখা যায় এবং কিভাবে JSONArray থেকে JSONObject তৈরি করা যায়।


1. JSONObject এর ভিতরে JSONArray রাখা

ধরা যাক, আমাদের একটি JSON অবজেক্টের মধ্যে JSONArray রাখতে হবে। এই ধরনের কাঠামোতে আপনি একটি JSON অবজেক্টের মধ্যে অনেকগুলো মান বা অবজেক্টের তালিকা রাখতে পারেন।

Example: JSON Object with JSON Array

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

public class JsonExample {
    public static void main(String[] args) {
        // JSON Array তৈরি করা
        JSONArray jsonArray = new JSONArray();
        jsonArray.add("apple");
        jsonArray.add("banana");
        jsonArray.add("cherry");

        // JSON Object তৈরি করা
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("fruits", jsonArray);  // JSONArray যুক্ত করা

        // JSON Object প্রিন্ট করা
        System.out.println(jsonObject.toJSONString());
    }
}

ব্যাখ্যা:

  • এখানে, প্রথমে একটি JSONArray তৈরি করা হয়েছে যাতে "apple", "banana", এবং "cherry" এর মতো স্ট্রিং মান যুক্ত করা হয়েছে।
  • তারপর, সেই JSONArray-কে একটি JSONObject-এ "fruits" নামক কী-এর মাধ্যমে যুক্ত করা হয়েছে।
  • toJSONString() মেথড ব্যবহার করে JSON অবজেক্টটি স্ট্রিং আকারে প্রিন্ট করা হয়েছে।

Output:

{"fruits":["apple","banana","cherry"]}

এখানে, JSONArray "fruits" কী-এর মান হিসেবে JSONObject এর ভিতরে রাখা হয়েছে।


2. JSONArray এর ভিতরে JSONObject রাখা

এখন, ধরা যাক, আমাদের একটি JSONArray-এর মধ্যে একাধিক JSONObject রাখতে হবে। এই প্রক্রিয়াটি সাধারণত একাধিক অবজেক্টের ডেটা একত্রিত করার জন্য ব্যবহার করা হয়।

Example: JSON Array with JSON Objects

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

public class JsonArrayExample {
    public static void main(String[] args) {
        // JSON Objects তৈরি করা
        JSONObject person1 = new JSONObject();
        person1.put("name", "John");
        person1.put("age", 30);
        
        JSONObject person2 = new JSONObject();
        person2.put("name", "Jane");
        person2.put("age", 25);

        // JSON Array তৈরি করা
        JSONArray jsonArray = new JSONArray();
        jsonArray.add(person1);
        jsonArray.add(person2);

        // JSON Array প্রিন্ট করা
        System.out.println(jsonArray.toJSONString());
    }
}

ব্যাখ্যা:

  • দুটি JSONObject তৈরি করা হয়েছে, যেখানে name এবং age কী-মান পেয়ার রয়েছে।
  • তারপর সেই দুটি JSONObject JSONArray এর মধ্যে যুক্ত করা হয়েছে।
  • toJSONString() মেথড ব্যবহার করে JSONArray কে স্ট্রিং আকারে প্রিন্ট করা হয়েছে।

Output:

[{"name":"John","age":30},{"name":"Jane","age":25}]

এখানে, দুটি JSONObject (যাদের মধ্যে name এবং age রয়েছে) একটি JSONArray এর মধ্যে রাখা হয়েছে।


3. JSONArray থেকে JSONObject বের করা

JSON থেকে JSONArray এবং JSONObject পার্স করার সময়, আপনি JSON অবজেক্টের ভেতরে থাকা JSONArray থেকে এক বা একাধিক JSONObject বের করতে পারেন।

Example: Extracting JSONObject from JSONArray

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

public class JsonExtractExample {
    public static void main(String[] args) {
        // JSON String যা JSONArray ধারণ করে
        String jsonString = "[{\"name\":\"John\",\"age\":30},{\"name\":\"Jane\",\"age\":25}]";

        // JSONParser ব্যবহার করে JSON Array পার্স করা
        JSONParser parser = new JSONParser();
        
        try {
            // JSONArray পার্স করা
            JSONArray jsonArray = (JSONArray) parser.parse(jsonString);

            // JSONArray থেকে JSONObject বের করা
            for (Object obj : jsonArray) {
                JSONObject jsonObject = (JSONObject) obj;
                String name = (String) jsonObject.get("name");
                long age = (long) jsonObject.get("age");  // JSON.simple returns Long, so need to convert it

                // মান প্রিন্ট করা
                System.out.println("Name: " + name + ", Age: " + age);
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  • প্রথমে একটি JSON string তৈরি করা হয়েছে যা একটি JSONArray ধারণ করে, এবং এতে দুটি JSONObject রয়েছে।
  • JSONParser ব্যবহার করে JSON স্ট্রিংটি JSONArray-এ রূপান্তর করা হয়েছে।
  • তারপর, JSONArray থেকে প্রতিটি JSONObject বের করে তার মান পাওয়া হয়েছে এবং প্রিন্ট করা হয়েছে।

Output:

Name: John, Age: 30
Name: Jane, Age: 25

এখানে, JSONArray থেকে প্রতিটি JSONObject বের করে তার মান (name, age) নিয়ে প্রদর্শন করা হয়েছে।


4. Nested JSON Object এবং JSONArray

JSON অবজেক্টের মধ্যে একাধিক nested JSON objects এবং JSONArray থাকতে পারে। এর মাধ্যমে আরও জটিল ডেটা কাঠামো তৈরি করা সম্ভব।

Example: Nested JSON Object and JSONArray

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

public class NestedJsonExample {
    public static void main(String[] args) {
        // Inner JSON Object (Address)
        JSONObject address = new JSONObject();
        address.put("street", "123 Main St");
        address.put("city", "New York");

        // JSON Array (Phone numbers)
        JSONArray phones = new JSONArray();
        JSONObject phone1 = new JSONObject();
        phone1.put("type", "home");
        phone1.put("number", "123-4567");

        JSONObject phone2 = new JSONObject();
        phone2.put("type", "mobile");
        phone2.put("number", "987-6543");

        phones.add(phone1);
        phones.add(phone2);

        // Outer JSON Object (Person)
        JSONObject person = new JSONObject();
        person.put("name", "John Doe");
        person.put("address", address);  // Nested Object
        person.put("phones", phones);    // Nested Array

        // JSON Object Print
        System.out.println(person.toJSONString());
    }
}

Output:

{
  "name": "John Doe",
  "address": {
    "street": "123 Main St",
    "city": "New York"
  },
  "phones": [
    {"type": "home", "number": "123-4567"},
    {"type": "mobile", "number": "987-6543"}
  ]
}

এখানে, একটি nested JSON object (address) এবং JSONArray (phones) JSONObject এর মধ্যে রাখা হয়েছে।


  • JSONArray এবং JSONObject JSON ডেটা স্ট্রাকচারের দুটি প্রধান উপাদান, যা JSON.simple লাইব্রেরি ব্যবহার করে Java অবজেক্টে রূপান্তরিত করা যায়।
  • আপনি JSONArray এবং JSONObject এর ভিতরে একে অপরকে রাখতে পারেন (nested structure) এবং JSON.simple এর মাধ্যমে তাদেরকে পার্স (parse) বা ম্যানিপুলেট (manipulate) করতে পারেন।
  • JSONObject এর ভিতরে JSONArray রাখা এবং JSONArray থেকে JSONObject বের করা খুব সহজ, এবং এতে complex JSON structures তৈরি এবং প্রসেস করা সম্ভব।

JSON.simple লাইব্রেরি আপনাকে JSON ডেটা ম্যানিপুলেশন এবং nested JSON অবজেক্টের সাথে কাজ করার জন্য একটি সহজ এবং কার্যকরী পদ্ধতি প্রদান করে।

Content added By

JSON.simple লাইব্রেরি ব্যবহার করে complex nested JSON ডেটা পার্সিং এবং এনকোডিং করা খুবই সহজ। JSON.simple-এ, আপনি nested JSON objects বা JSON arrays কে Java objects-এ রূপান্তর করতে পারেন এবং JSON অবজেক্ট তৈরি বা লিখতেও পারেন।

এখানে আমরা complex nested JSON পার্সিং এবং এনকোডিং এর প্রক্রিয়া দেখাবো।


Complex Nested JSON Structure Example

ধরা যাক, আমাদের একটি JSON ডেটা স্ট্রিং রয়েছে যা nested objects এবং arrays ধারণ করে। আমরা সেই JSON ডেটাকে Java objects এ রূপান্তর (deserialization) করব এবং আবার JSON স্ট্রিংয়ে রূপান্তর (serialization) করব।

Example: Complex Nested JSON

{
  "id": 1,
  "name": "John Doe",
  "address": {
    "street": "123 Main St",
    "city": "New York",
    "zipcode": "10001"
  },
  "phones": [
    {"type": "home", "number": "123-4567"},
    {"type": "mobile", "number": "987-6543"}
  ]
}

এখানে, address একটি nested object এবং phones একটি JSON array যার মধ্যে আরো অবজেক্ট রয়েছে।


Step 1: Java Classes তৈরি করা

JSON ডেটার সাথে মিলে এমন Java ক্লাস তৈরি করা দরকার যাতে আমরা ডেটা পার্স করতে পারি।

Person Class (Main Object)

import java.util.List;

public class Person {
    private int id;
    private String name;
    private Address address;
    private List<Phone> phones;

    // Getters and Setters
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    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<Phone> getPhones() {
        return phones;
    }

    public void setPhones(List<Phone> phones) {
        this.phones = phones;
    }

    @Override
    public String toString() {
        return "Person [id=" + id + ", name=" + name + ", address=" + address + ", phones=" + phones + "]";
    }
}

Address Class (Nested Object)

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

    // 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 getZipcode() {
        return zipcode;
    }

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

    @Override
    public String toString() {
        return "Address [street=" + street + ", city=" + city + ", zipcode=" + zipcode + "]";
    }
}

Phone Class (Array Elements)

public class Phone {
    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;
    }

    @Override
    public String toString() {
        return "Phone [type=" + type + ", number=" + number + "]";
    }
}

Step 2: JSON Parsing with JSON.simple

এখন আমরা JSON.simple লাইব্রেরি ব্যবহার করে complex nested JSON ডেটা পার্স (deserialize) করব এবং সঠিকভাবে Java objects এ রূপান্তর করব।

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

import java.util.ArrayList;
import java.util.List;

public class JsonDeserializationExample {
    public static void main(String[] args) {
        String jsonString = "{\"id\": 1, \"name\": \"John Doe\", \"address\": {\"street\": \"123 Main St\", \"city\": \"New York\", \"zipcode\": \"10001\"}, \"phones\": [{\"type\": \"home\", \"number\": \"123-4567\"}, {\"type\": \"mobile\", \"number\": \"987-6543\"}]}";

        JSONParser parser = new JSONParser();
        try {
            // Parse the JSON string into JSONObject
            JSONObject jsonObject = (JSONObject) parser.parse(jsonString);

            // Deserialize JSON data into Java objects
            int id = ((Long) jsonObject.get("id")).intValue();
            String name = (String) jsonObject.get("name");

            // Deserialize address (nested object)
            JSONObject addressJson = (JSONObject) jsonObject.get("address");
            Address address = new Address();
            address.setStreet((String) addressJson.get("street"));
            address.setCity((String) addressJson.get("city"));
            address.setZipcode((String) addressJson.get("zipcode"));

            // Deserialize phones (array)
            JSONArray phonesJson = (JSONArray) jsonObject.get("phones");
            List<Phone> phones = new ArrayList<>();
            for (Object phoneObj : phonesJson) {
                JSONObject phoneJson = (JSONObject) phoneObj;
                Phone phone = new Phone();
                phone.setType((String) phoneJson.get("type"));
                phone.setNumber((String) phoneJson.get("number"));
                phones.add(phone);
            }

            // Create Person object from JSON data
            Person person = new Person();
            person.setId(id);
            person.setName(name);
            person.setAddress(address);
            person.setPhones(phones);

            // Print the deserialized object
            System.out.println(person);

        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

Explanation of the code:

  1. JSONParser: JSON ডেটা পার্স করতে JSONParser ক্লাস ব্যবহার করা হয়েছে।
  2. JSONObject: JSON স্ট্রিং থেকে JSON অবজেক্টে রূপান্তর করা হয়েছে।
  3. Address (Nested Object): JSON অবজেক্টের মধ্যে থাকা address অবজেক্টটি পার্স করে Address ক্লাসের অবজেক্টে রূপান্তরিত করা হয়েছে।
  4. JSONArray: JSON অ্যারে phones থেকে প্রতিটি ফোন অবজেক্ট বের করে Phone ক্লাসের অবজেক্টে রূপান্তরিত করা হয়েছে এবং সেগুলো List তে রাখা হয়েছে।
  5. Person Object: সব তথ্য সংগ্রহ করে একটি Person অবজেক্ট তৈরি করা হয়েছে।

Output:

Person [id=1, name=John Doe, address=Address [street=123 Main St, city=New York, zipcode=10001], phones=[Phone [type=home, number=123-4567], Phone [type=mobile, number=987-6543]]]

এখানে, আমরা nested JSON (যেমন, address এবং phones অ্যারে) থেকে ডেটা পার্স করে Java objects-এ রূপান্তর করেছি এবং Person অবজেক্টের মধ্যে সেগুলো সংরক্ষণ করেছি।


Step 3: JSON Encoding (Serialization)

এখন, আমরা JSON.simple ব্যবহার করে Java objects কে আবার JSON String-এ রূপান্তর (serialize) করব।

Java Objects কে JSON String এ রূপান্তর করা:

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

public class JsonSerializationExample {
    public static void main(String[] args) {
        // Create a Person object
        Person person = new Person();
        person.setId(1);
        person.setName("John Doe");

        // Set address for the person
        Address address = new Address();
        address.setStreet("123 Main St");
        address.setCity("New York");
        address.setZipcode("10001");
        person.setAddress(address);

        // Set phones for the person
        List<Phone> phones = new ArrayList<>();
        Phone phone1 = new Phone();
        phone1.setType("home");
        phone1.setNumber("123-4567");
        phones.add(phone1);
        Phone phone2 = new Phone();
        phone2.setType("mobile");
        phone2.setNumber("987-6543");
        phones.add(phone2);
        person.setPhones(phones);

        // Serialize Java objects to JSON
        JSONObject personJson = new JSONObject();
        personJson.put("id", person.getId());
        personJson.put("name", person.getName());

        // Serialize address
        JSONObject addressJson = new JSONObject();
        addressJson.put("street", person.getAddress().getStreet());
        addressJson.put("city", person.getAddress().getCity());
        addressJson.put("zipcode", person.getAddress().getZipcode());
        personJson.put("address", addressJson);

        // Serialize phones
        JSONArray phonesJson = new JSONArray();
        for (Phone phone : person.getPhones()) {
            JSONObject phoneJson = new JSONObject();
            phoneJson.put("type", phone.getType());
            phoneJson.put("number", phone.getNumber());
            phonesJson.add(phoneJson);
        }
        personJson.put("phones", phonesJson);

        // Output the JSON string
        System.out.println(personJson.toJSONString());
    }
}

Output:

{
  "id": 1,
  "name": "John Doe",
  "address": {
    "street": "123 Main St",
    "city": "New York",
    "zipcode": "10001"
  },
  "phones": [
    {
      "type": "home",
      "number": "123-4567"
    },
    {
      "type": "mobile",
      "number": "987-6543"
    }
  ]
}

এখানে, আমরা Java objects (Person, Address, Phone) থেকে একটি JSON String তৈরি করেছি।


  1. Complex JSON ডেটার Deserialization এবং Serialization

সহজেই JSON.simple লাইব্রেরি দিয়ে করা যায়। 2. Nested JSON objects এবং JSONArray ব্যবহার করে আরও জটিল কাঠামো তৈরি করা সম্ভব। 3. Java objects কে JSON-এ রূপান্তর এবং JSON থেকে Java objects-এ রূপান্তর করার প্রক্রিয়া সহজ এবং কার্যকরী। 4. JSON.simple লাইব্রেরি Java ডেভেলপারদের জন্য একটি খুবই কার্যকরী টুল JSON ডেটা ম্যানিপুলেশন এবং পার্সিংয়ের জন্য।

Content added By

Nested JSON হলো JSON ডেটা স্ট্রাকচার, যেখানে একটি JSON অবজেক্টের মধ্যে আরেকটি JSON অবজেক্ট (অথবা অ্যারে) থাকতে পারে। এটি জটিল ডেটা কাঠামো তৈরি করতে ব্যবহৃত হয় এবং সাধারণত complex data ম্যানেজ করার জন্য ব্যবহৃত হয়, যেমন address, contact information, order details ইত্যাদি।

এখানে আমরা JSON.simple লাইব্রেরি ব্যবহার করে nested JSON objects হ্যান্ডল করার একটি উদাহরণ দেখব।


ধাপ ১: Nested JSON Structure

ধরা যাক আমাদের একটি JSON স্ট্রিং রয়েছে, যেখানে একটি Person অবজেক্টের মধ্যে একটি Address অবজেক্ট এবং একটি Phones অ্যারে রয়েছে। JSON ডেটা নিচে দেওয়া হলো:

Sample Nested JSON:

{
    "name": "John Doe",
    "age": 30,
    "address": {
        "street": "123 Main St",
        "city": "New York",
        "zipcode": "10001"
    },
    "phones": [
        {"type": "home", "number": "123-4567"},
        {"type": "mobile", "number": "987-6543"}
    ]
}

এখানে, "address" একটি nested JSON object এবং "phones" একটি JSON array


ধাপ ২: Java Classes তৈরি করা

এখন, আমরা Java ক্লাস তৈরি করব যেখানে Person, Address, এবং Phone নামক কাস্টম অবজেক্ট থাকবে। প্রতিটি অবজেক্টের জন্য ফিল্ড এবং getter/setter তৈরি করা হবে।

2.1. Address ক্লাস:

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

    // Constructor
    public Address(String street, String city, String zipcode) {
        this.street = street;
        this.city = city;
        this.zipcode = zipcode;
    }

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

    public String getCity() {
        return city;
    }

    public String getZipcode() {
        return zipcode;
    }
}

2.2. Phone ক্লাস:

public class Phone {
    private String type;
    private String number;

    // Constructor
    public Phone(String type, String number) {
        this.type = type;
        this.number = number;
    }

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

    public String getNumber() {
        return number;
    }
}

2.3. Person ক্লাস:

import java.util.List;

public class Person {
    private String name;
    private int age;
    private Address address;
    private List<Phone> phones;

    // Constructor
    public Person(String name, int age, Address address, List<Phone> phones) {
        this.name = name;
        this.age = age;
        this.address = address;
        this.phones = phones;
    }

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

    public int getAge() {
        return age;
    }

    public Address getAddress() {
        return address;
    }

    public List<Phone> getPhones() {
        return phones;
    }

    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + ", address=" + address.getStreet() + ", " + address.getCity() + ", " + address.getZipcode() + "]";
    }
}

এখানে, Person ক্লাসে আমরা Address এবং Phone অবজেক্ট যুক্ত করেছি। Phones একটি List হিসেবে রাখা হয়েছে যা একাধিক ফোন নম্বর ধারণ করতে পারে।


ধাপ ৩: Nested JSON Parsing (Deserialization)

এখন আমরা JSON.simple লাইব্রেরি ব্যবহার করে JSON স্ট্রিং থেকে Person অবজেক্টে ডেটা পার্স (deserialize) করব, যেখানে Address এবং Phones nested JSON structures রয়েছে।

3.1. Nested JSON Parsing Example:

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;

import java.util.ArrayList;
import java.util.List;

public class NestedJsonParsingExample {
    public static void main(String[] args) {
        String jsonString = "{\n" +
                "    \"name\": \"John Doe\",\n" +
                "    \"age\": 30,\n" +
                "    \"address\": {\n" +
                "        \"street\": \"123 Main St\",\n" +
                "        \"city\": \"New York\",\n" +
                "        \"zipcode\": \"10001\"\n" +
                "    },\n" +
                "    \"phones\": [\n" +
                "        {\"type\": \"home\", \"number\": \"123-4567\"},\n" +
                "        {\"type\": \"mobile\", \"number\": \"987-6543\"}\n" +
                "    ]\n" +
                "}";

        JSONParser parser = new JSONParser();

        try {
            // Parse JSON string into JSONObject
            JSONObject jsonObject = (JSONObject) parser.parse(jsonString);

            // Deserialize the Person data
            String name = (String) jsonObject.get("name");
            long age = (long) jsonObject.get("age");

            // Deserialize the Address object (nested object)
            JSONObject addressJson = (JSONObject) jsonObject.get("address");
            String street = (String) addressJson.get("street");
            String city = (String) addressJson.get("city");
            String zipcode = (String) addressJson.get("zipcode");
            Address address = new Address(street, city, zipcode);

            // Deserialize the Phones array (JSON array)
            JSONArray phonesJson = (JSONArray) jsonObject.get("phones");
            List<Phone> phones = new ArrayList<>();
            for (Object phoneObj : phonesJson) {
                JSONObject phoneJson = (JSONObject) phoneObj;
                String type = (String) phoneJson.get("type");
                String number = (String) phoneJson.get("number");
                phones.add(new Phone(type, number));
            }

            // Create Person object
            Person person = new Person(name, (int) age, address, phones);

            // Print the deserialized Person object
            System.out.println(person);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Output:

Person [name=John Doe, age=30, address=123 Main St, New York, 10001]

ব্যাখ্যা:

  1. JSONParser ব্যবহার করে JSON স্ট্রিংটি JSONObject-এ পার্স করা হয়েছে।
  2. Address অবজেক্টটি একটি nested object হিসেবে প্যার্স করা হয়েছে।
  3. Phones অ্যারে (JSON array) থেকে ফোনের তথ্য একে একে বের করে Phone অবজেক্টে রূপান্তর করা হয়েছে এবং List তে রাখা হয়েছে।
  4. সবশেষে, Person অবজেক্টে ডেটা সেট করা হয়েছে এবং এটি প্রিন্ট করা হয়েছে।

ধাপ ৪: JSON File থেকে Nested Object Parsing

এখন আমরা দেখব কিভাবে একটি JSON ফাইল থেকে nested JSON objects পার্স করা যায় এবং Java objects-এ রূপান্তর করা যায়।

4.1. JSON File (person.json)

{
    "name": "Jane Smith",
    "age": 28,
    "address": {
        "street": "456 Elm St",
        "city": "Los Angeles",
        "zipcode": "90001"
    },
    "phones": [
        {"type": "home", "number": "555-1234"},
        {"type": "work", "number": "555-5678"}
    ]
}

4.2. File থেকে Nested JSON Parsing:

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;

public class JsonFileDeserialization {
    public static void main(String[] args) {
        JSONParser parser = new JSONParser();

        try (FileReader reader = new FileReader("person.json")) {
            // Parse the JSON file into JSONObject
            JSONObject jsonObject = (JSONObject) parser.parse(reader);

            // Deserialize the Person data
            String name = (String) jsonObject.get("name");
            long age = (long) jsonObject.get("age");

            // Deserialize Address (nested JSON object)
            JSONObject addressJson = (JSONObject) jsonObject.get("address");
            String street = (String) addressJson.get("street");
            String city = (String) addressJson.get("city");
            String zipcode = (String) addressJson.get("zipcode");
            Address address = new Address(street, city, zipcode);

            // Deserialize Phones (JSON array)
            JSONArray phonesJson = (JSONArray) jsonObject.get("phones");
            List<Phone> phones = new ArrayList<>();
            for (Object phoneObj : phonesJson) {
                JSONObject phoneJson = (JSONObject) phoneObj;
                String type = (String) phoneJson.get("type");
                String number = (String) phoneJson.get("number");
                phones.add(new Phone(type, number));
            }

            // Create Person object
            Person person = new Person(name, (int) age, address, phones);

            // Print the deserialized Person object
            System.out.println(person);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Output:

Person [name=Jane Smith, age=28, address=456 Elm St, Los Angeles, 90001]

  • Nested JSON objects এবং arrays পার্স করতে JSON.simple লাইব্রেরি খুবই উপকারী।
  • Deserialization করতে JSONParser এবং JSONObject ব্যবহার করা হয়।
  • JSONArray ব্যবহার করে JSON অ্যারের মধ্যে থাকা অবজেক্টগুলি একটি List তে রূপান্তর করা হয়।
  • nested structures পার্স করার জন্য, আপনাকে প্রতি স্তরের JSON অবজেক্ট বা অ্যারে থেকে ডেটা বের করতে হবে এবং সেগুলিকে Java objects-এ রূপান্তর করতে হবে।

এই প্রক্রিয়া JSON ডেটা ম্যানিপুলেশন এবং বিশ্লেষণের জন্য একটি শক্তিশালী উপায়।

Content added By
Promotion

Are you sure to start over?

Loading...