Saya menggunakan GSON untuk mengonversi data JSON yang saya dapatkan ke objek Java. Ini bekerja dengan cukup baik di semua pengujian saya. Masalahnya adalah objek nyata kita memiliki beberapa properti bernama seperti is_online. GSON hanya memetakannya jika namanya benar-benar sama, alangkah baiknya jika GSON mengonversi nama tersebut menjadi kasus unta Java isOnline.
Tampaknya hal ini dimungkinkan saat membuat data JSON, huruf besar / kecil diubah menjadi garis bawahi kata-kata yang dipisahkan di JSON. Tetapi saya tidak dapat menemukan cara untuk menentukan ini dengan cara lain.
java
json
gson
camelcasing
Janusz
sumber
sumber
Jawaban:
Saya telah menemukan pengaturan berikut berfungsi sempurna saat membaca json dengan atribut yang digarisbawahi dan menggunakan camelcasing dalam model saya.
sumber
Anda dapat menggunakan
SerializedName
anotasi:Catatan: Bila Anda sudah menyetel
FieldNamingPolicy
,SerializedName
akan menimpa pengaturannya untuk bidang tertentu (cukup berguna untuk kasus khusus).sumber
Ingatlah bahwa contoh Anda adalah case edge. Jika Anda memiliki properti 'foo' getternya harus dinamai 'getFoo', dan jika Anda memiliki properti bernama 'foo_bar' getternya harus dinamai 'getFooBar', namun, dalam contoh Anda, Anda memetakan boolean dan boolean memiliki konvensi penamaan kasus khusus di java. Properti boolean primitif bernama online harus memiliki getter bernama 'isOnline', BUKAN 'getOnline' atau bahkan lebih buruk lagi, 'getIsOnline'. Objek pembungkus boolean (yaitu Boolean) tidak boleh mengikuti kasus khusus ini dan properti bernama 'online' harus memiliki getter bernama 'getOnline'.
Oleh karena itu, memiliki properti boolean dengan 'ada' di namanya adalah kasus tepi, di mana Anda ingin menghapus awalan khusus ini selama konversi Anda. Di arah sebaliknya, kode Anda mungkin ingin memeriksa objek json untuk nama properti mentah serta versi 'is_XXX'.
sumber
Saya pikir apa yang Anda inginkan ada di sini . Dengan menggunakan anotasi, Anda dapat memberi tahu GSON bahwa mySuperCoolField sebenarnya disebut this_field_is_fun di JSON dan akan membukanya dengan benar. Setidaknya saya pikir ini juga berfungsi untuk deserialization.
Jika tidak berhasil, Anda dapat menggunakan JsonSerializer / JsonDeserializers kustom, yang berfungsi dengan baik, tetapi Anda harus memperbaruinya untuk perubahan di kelas Anda (seperti saat Anda menambahkan kolom). Anda kehilangan keajaiban otomatis.
Hal termudah untuk dilakukan (yang akan jelek, tetapi sangat bersih dan sederhana jika saran pertama tidak berhasil) adalah dengan memberi nama bidang dengan cara membuat GSON senang, dan menambahkan metode pengakses tambahan dengan nama yang Anda suka , mis
sumber