Saya memiliki beberapa kelas model seperti Pelanggan
, Produk
, dll dalam proyek saya yang memiliki beberapa bidang dan metode setter-getter mereka, saya perlu menukar objek dari kelas-kelas ini sebagai JSONObject melalui Sockets ke dan dari klien dan server.
Apakah ada cara untuk membuat JSONObject
secara langsung dari objek kelas model sehingga field dari objek tersebut menjadi kunci dan nilai dari objek kelas model tersebut menjadi nilai untuk JSONObject ini.
Contoh:
Customer c = new Customer();
c.setName("Foo Bar");
c.setCity("Atlantis");
.....
/* More such setters and corresponding getters when I need the values */
.....
Dan saya membuat JSON Object sebagai:
JSONObject jsonc = new JSONObject(c); //I'll use this only once I'm done setting all values.
Yang membuat saya mendapatkan sesuatu seperti:
{"name":"Foo Bar","city":"Atlantis"...}
Harap dicatat bahwa, di beberapa kelas model saya, properti tertentu itu sendiri sebuah objek dari kelas model lain. Seperti:
Product p = new Product();
p.setName("FooBar Cookies");
p.setProductType("Food");
c.setBoughtProduct(p);
Dalam kasus seperti di atas, seperti yang saya harapkan, objek JSON yang dihasilkan adalah:
{"name":"Foo Bar","city":"Atlantis","bought":{"productname":"FooBar Cookies","producttype":"food"}}
Saya tahu saya bisa membuat sesuatu seperti toJSONString()
di setiap kelas model dan membuat string yang ramah JSON dan memanipulasinya, tetapi dalam pengalaman saya sebelumnya dalam membuat layanan RESTful di Java (yang sama sekali di luar konteks untuk pertanyaan ini), saya bisa mengembalikan string JSON dari metode layanan dengan menggunakan @Produces(MediaType.APPLICATION_JSON)
dan memiliki metode yang mengembalikan objek kelas model. Sehingga menghasilkan string JSON, yang dapat saya konsumsi di ujung klien.
Saya bertanya-tanya apakah mungkin untuk mendapatkan perilaku serupa dalam skenario saat ini.
Google GSON melakukan hal ini; Saya telah menggunakannya pada beberapa proyek dan ini sederhana dan bekerja dengan baik. GSON dapat melakukan penerjemahan untuk objek-objek sederhana tanpa intervensi, tetapi ada mekanisme untuk menyesuaikan terjemahan (di kedua arah,) juga.
Gson g = ...;
String jsonString = g.toJson(new Customer());
Anda dapat menggunakan Gson untuk itu:
Ketergantungan Maven:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.0</version>
</dependency>
Kode Java:
Customer customer = new Customer();
Product product = new Product();
// Set your values ...
Gson gson = new Gson();
String json = gson.toJson(customer);
Customer deserialized = gson.fromJson(json, Customer.class);