JsonConfig क्लास का उपयोग सीरियलाइजेशन प्रक्रिया को कॉन्फिगर करने के लिए किया जा सकता है। हम JsonConfig के setJsonPropertyFilter() मेथड का उपयोग JSON में सीरियलाइज करते समय प्रॉपर्टी फिल्टर सेट करने के लिए कर सकते हैं। हमें PropertyFilter इंटरफेस के apply() मेथड को ओवरराइड करके एक कस्टम PropertyFilter क्लास इम्प्लीमेंट करने की आवश्यकता होती है। यह true रिटर्न करता है यदि प्रॉपर्टी को फिल्टर आउट किया जाएगा या false अन्यथा।
सिंटैक्स
public void setJsonPropertyFilter(PropertyFilter jsonPropertyFilter)
उदाहरण
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import net.sf.json.util.PropertyFilter;
public class ConvertBeanToJsonExcludeFilterTest {
public static void main(String[] args) {
Student student = new Student("Sai", "Chaitanya", 20, "Hyderabad");
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setJsonPropertyFilter(new CustomPropertyFilter());
JSONObject jsonObj = JSONObject.fromObject(student, jsonConfig);
System.out.println(jsonObj.toString(3)); // प्रिटी प्रिंट JSON
}
public static class Student {
private String firstName, lastName, address;
public int age;
public Student(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 String getLastName() { return lastName; }
public int getAge() { return age; }
public String getAddress() { return address; }
}
}
// CustomPropertyFilter क्लास
class CustomPropertyFilter implements PropertyFilter {
@Override
public boolean apply(Object source, String name, Object value) {
if (Number.class.isAssignableFrom(value.getClass()) ||
String.class.isAssignableFrom(value.getClass())) {
return false; // शामिल करें
}
return true; // एक्सक्लूड करें
}
}
आउटपुट
{
"firstName": "Sai",
"lastName": "Chaitanya",
"address": "Hyderabad",
"age": 20
}
नोट: आउटपुट में सभी फील्ड्स दिख रहे हैं
दिए गए फिल्टर लॉजिक के अनुसार, Number और String क्लास के फील्ड्स शामिल होने चाहिए (false रिटर्न)। चूंकि सभी फील्ड्स String या Number हैं, इसलिए सभी शामिल हैं। वास्तविक एक्सक्लूजन के लिए:
// विशिष्ट फील्ड्स को एक्सक्लूड करने के लिए
class CustomPropertyFilter implements PropertyFilter {
private Set<String> excludedFields = Set.of("password", "ssn", "internalId");
@Override
public boolean apply(Object source, String name, Object value) {
return excludedFields.contains(name); // true = एक्सक्लूड
}
}
JsonConfig के अन्य उपयोगी मेथड्स
| मेथड | विवरण |
|---|---|
| setExcludes(String[]) | नाम से फील्ड्स एक्सक्लूड करें |
| setIncludes(String[]) | केवल निर्दिष्ट फील्ड्स शामिल करें |
| setJsonPropertyFilter() | कस्टम फिल्टर लॉजिक |
| setCycleDetectionStrategy() | सर्कुलर रेफरेंस हैंडलिंग |
| registerJsonValueProcessor() | कस्टम टाइप सीरियलाइजर्स |
setExcludes() का उपयोग (सरल दृष्टिकोण)
JsonConfig config = new JsonConfig();
config.setExcludes(new String[]{"password", "ssn", "internalId"});
JSONObject json = JSONObject.fromObject(bean, config);
JSON-lib निर्भरताएं
पिछले JSON-lib आर्टिकल्स देखें (1005094121)।
आधुनिक विकल्प (Jackson)
// @JsonIgnore फील्ड पर
@JsonIgnore
private String password;
// @JsonView के साथ
@JsonView(Views.Public.class)
private String name;
// डायनामिक फिल्टरिंग
ObjectMapper mapper = new ObjectMapper();
SimpleBeanPropertyFilter filter = SimpleBeanPropertyFilter
.serializeAllExcept("password", "ssn");
FilterProvider filters = new SimpleFilterProvider()
.addFilter("myFilter", filter);
mapper.writer(filters).writeValueAsString(bean);