Gson 用のカスタム JSON デシリアライザーの作成
JSON オブジェクトを扱う場合、カスタム Java クラスへのデシリアライズは不可欠なタスクです。人気の JSON パーサーである Gson を使用すると、特定のシナリオを処理するカスタム デシリアライザーを作成できます。
このガイドでは、Java があるシナリオを使用して、Gson 用のカスタム JSON デシリアライザーを作成する方法を検討します。ユーザー情報とユーザーの JSON リストを表すクラス User。
問題
User クラスに逆シリアル化する必要があるユーザー オブジェクトの JSON リストがあります。ただし、カスタム デシリアライザーは正しく動作しません。
解決策
Gson 用のカスタム JSON デシリアライザーを作成するには、JsonDeserializer インターフェイスを実装し、デシリアライズ メソッドを提供します。 。このメソッドは、JSON 要素、逆シリアル化する型、および JSON 逆シリアル化コンテキストを引数として受け取ります。
たとえば、次の調整されたコードを考えてみましょう。
@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); }
追加考慮事項
次に示すように、別のアプローチを使用してコード内の手動解析を最小限に抑えることもできます。以下:
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); } }
このアプローチでは、TimestampDeserializer を使用して Timestamp オブジェクトの逆シリアル化を処理し、逆シリアル化メソッドでの手動解析を最小限に抑えます。
以上が効率的なデータ解析のために Gson でカスタム JSON デシリアライザーを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。