Menulis Penyahserialisasi JSON Tersuai untuk Gson
Apabila berurusan dengan objek JSON, menyahsirikannya ke dalam kelas Java tersuai adalah tugas penting. Gson, penghurai JSON yang popular, membolehkan anda membuat penyahserialisasi tersuai untuk mengendalikan senario tertentu.
Dalam panduan ini, kami akan meneroka cara menulis penyahserialisasi JSON tersuai untuk Gson, menggunakan senario di mana kami mempunyai Java Pengguna kelas yang mewakili maklumat pengguna dan senarai JSON pengguna.
The Masalah
Anda mempunyai senarai JSON objek pengguna yang perlu dinyahsiri ke dalam kelas Pengguna. Walau bagaimanapun, penyahserialisasi tersuai anda tidak berfungsi dengan betul.
Penyelesaian
Untuk menulis penyahserialisasi JSON tersuai untuk Gson, anda boleh melaksanakan antara muka JsonDeserializer dan menyediakan kaedah penyahserikatan . Kaedah ini mengambil elemen JSON, jenis yang sepatutnya dinyahsiri dan konteks penyahserikatan JSON sebagai hujah.
Sebagai contoh, pertimbangkan kod terlaras berikut:
@Override public User deserialize(JsonElement json, Type type, JsonDeserializationContext context) throws JsonParseException { int id = json.getAsJsonObject().get("id").getAsInt(); String name = json.getAsJsonObject().get("name").getAsString(); Timestamp updateDate = context.deserialize(json.getAsJsonObject().get("update_date"), Timestamp.class); return new User(id, name, updateDate); }
Tambahan Pertimbangan
Anda juga boleh menggunakan pendekatan berbeza untuk meminimumkan penghuraian manual dalam kod anda, seperti yang ditunjukkan di bawah:
public static void main(String[] args) { GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES); gsonBuilder.registerTypeAdapter(Timestamp.class, new TimestampDeserializer()); Gson gson = gsonBuilder.create(); User[] users = gson.fromJson(jsonInput, User[].class); } class TimestampDeserializer implements JsonDeserializer<Timestamp> { @Override public Timestamp deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { long time = Long.parseLong(json.getAsString()); return new Timestamp(time); } }
Pendekatan ini menggunakan TimestampDeserializer untuk mengendalikan penyahsirilan objek Timestamp, meminimumkan penghuraian manual dalam kaedah penyahserikatan.
Atas ialah kandungan terperinci Bagaimana untuk Menulis Deserializer JSON Tersuai dalam Gson untuk Penghuraian Data yang Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!