JSONObject.fromObject(obj)
Geliştirme yaparken bir bir sınıfın alanının ismine alias vererek json oluşturmak istedim. Google'da bir miktar aramadan sonra pek bir sonuca ulaşamadım. json-lib java-doc'ları ve bir miktar kaynak kod okuyup saç baş yolduktan sonra çözüme ulaşabildim.
Aşağıdaki gibi bir sınıfınızın olduğunu varsayalım.
public class Kisi { private String ad; private String soyad; //getters //settersBu alanların json'a çevrilirken name, surname isimlerine dönüştürülmesini, nesnenizin ismininde person olmasını istediğinizi varsayalım.
Bu durumda JsonBeanProcessor sınıfını extend eden kendi sınıfınızı yazıp bu processor'ü JsonConfig'e register ettikten sonra json oluştururken JsonConfig'i de parametre olarak geçmeniz gerekiyor. Biraz karışık oldu. Aşağıdaki kod parçası sınıfımızda istediğimiz alanlara alias ekleyip json string'i dönüyor.
private String toJson(Object obj) { JsonConfig jsonConfig = new JsonConfig(); jsonConfig.registerJsonBeanProcessor(Kisi.class, new JsonBeanProcessor() { public JSONObject processBean(Object bean, JsonConfig jsonConfig) { JSONObject jsonObject = null; if (bean instanceof Kisi) { jsonObject = new JSONObject().accumulate("person", new JSONObject() .element("name", ((Kisi) bean).getAd()) .element("surname", ((Kisi) bean).getSoyad())); } else { jsonObject = new JSONObject(true); } return jsonObject; } } ); return JSONObject.fromObject(obj, jsonConfig).toString(); }Bu değişikliği yapmadan önce dönen json
Değişiklikten sonraki hali
Kodları içeren örnek uygulamayı adresinden indirebilirsiniz. Konsoldan mvn jetty:run diyerek uygulamayı çalıştırdıktan sonra http://localhost:9090/json-lib/Hello adresinden uygulamaya erişebilirsiniz.