JSONObject क्लास नाम/वैल्यू पेयर्स का एक कलेक्शन है (अनऑर्डर्ड) जबकि बीन अपने मेंबर फील्ड्स के लिए सेटर और गेटर मेथड्स वाली क्लास है। हम JSONObject क्लास के toBean() मेथड का उपयोग करके JSON ऑब्जेक्ट को बीन में कन्वर्ट कर सकते हैं।
सिंटैक्स
public static Object toBean(JSONObject jsonObject, Class beanClass)
उदाहरण
import net.sf.json.JSONObject;
public class ConvertJSONObjToBeanTest {
public static void main(String[] args) {
Employee emp = new Employee("Sai", "Ram", 30, "Bangalore");
JSONObject jsonObj = JSONObject.fromObject(emp);
System.out.println(jsonObj.toString(3)); // प्रिटी प्रिंट JSON
emp = (Employee) JSONObject.toBean(jsonObj, Employee.class);
System.out.println(emp.toString());
}
// Employee क्लास
public static class Employee {
private String firstName, lastName, address;
private int age;
public Employee() { }
public Employee(String firstName, String lastName, int age, String address) {
super();
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.address = address;
}
// गेटर्स और सेटर्स...
public String getFirstName() { return firstName; }
public void setFirstName(String firstName) { this.firstName = firstName; }
public String getLastName() { return lastName; }
public void setLastName(String lastName) { this.lastName = lastName; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public String getAddress() { return address; }
public void setAddress(String address) { this.address = address; }
public String toString() {
return "Employee[ " +
"firstName = " + firstName +
", lastName = " + lastName +
", age = " + age +
", address = " + address +
" ]";
}
}
}
आउटपुट
{
"firstName": "Sai",
"lastName": "Ram",
"address": "Bangalore",
"age": 30
}
Employee[ firstName = Sai, lastName = Ram, age = 30, address = Bangalore ]
प्रक्रिया प्रवाह
- बीन → JSON: JSONObject.fromObject(bean) - बीन को JSONObject में कन्वर्ट करता है
- JSON → बीन: JSONObject.toBean(jsonObj, BeanClass.class) - JSONObject को बीन में कन्वर्ट करता है
- आवश्यकताएं: डिफ़ॉल्ट कंस्ट्रक्टर, गेटर्स/सेटर्स, JSON कीज़ प्रॉपर्टी नामों से मेल खानी चाहिए
एडवांस्ड कन्वर्जन विकल्प
// कस्टम प्रॉपर्टी सेटर के साथ
BeanUtilsBean beanUtils = new BeanUtilsBean();
JSONObject.toBean(jsonObj, BeanClass.class, beanUtils);
// टाइप हिंट्स के साथ (क्लास इन्फो के लिए)
jsonObj.put("@class", "com.example.Employee");
Employee emp = (Employee) JSONObject.toBean(jsonObj, Employee.class);
// नेस्टेड बीन्स के लिए
class Address { String city; }
class Employee { Address address; }
// JSON: {"address": {"city": "Hyderabad"}}
// ऑटोमैटिकली Address बीन बनाता है
सामान्य समस्याएं और समाधान
| समस्या | समाधान |
|---|---|
| डिफ़ॉल्ट कंस्ट्रक्टर नहीं | पब्लिक नो-आर्ग कंस्ट्रक्टर जोड़ें |
| सेटर नहीं मिला | सभी फील्ड्स के लिए सेटर मेथड्स सुनिश्चित करें |
| टाइप मिसमैच | JSON वैल्यू टाइप बीन प्रॉपर्टी टाइप से मेल खाना चाहिए |
| केस सेंसिटिविटी | JSON कीज़ प्रॉपर्टी नामों से मेल खानी चाहिए (केस-सेंसिटिव) |
नोट
JSON-lib लिगेसी लाइब्रेरी है। आधुनिक एप्लिकेशन्स के लिए Jackson (ObjectMapper.readValue) या Gson (fromJson) का उपयोग करें जो बेहतर टाइप सेफ्टी, परफॉरमेंस और मेंटेनेंस प्रदान करते हैं।