ネストされたJSONを各クラスのTypeAdapterの実装を持つネストされたJavaオブジェクトに変換するには、google gson TypeAdapterを使用しようとしています。しかし、私は単一のアダプタクラスで完全なread()メソッドロジックを記述したくありません。私はネット上でいくつかの質問とblogの例を紹介しました。しかし、完全な読取りロジックは単一クラスにあります。gson TypeAdapterを使用してネストされたJSONをネストされたJavaオブジェクトに変換
小さいネストされたオブジェクトの場合、単一のアダプターでロジックを持つことはできますが、大きなオブジェクト(各クラスに10-15個以上のフィールドを持つ)ではうまくいかない場合があります。たとえば、JSONのキーについては
[更新]
クラス属性のと同じように見えますが、実際に私がhyphen-separated-small-case
キーの代わりに、Camel case
キーとして入力を取得します。だから、私のjsonとjavaクラスの属性名は同じではないので、私はマッピングのための私のカスタムロジックを書く必要があります。
など。 サンプルJSON入力:
{
"id": 1,
"name": "Alex",
"emailId": "[email protected]",
"address": {
"address": "21ST & FAIRVIEW AVE",
"district": "district",
"city": "EATON",
"region": "PA",
"postalCode": "18044",
"country": "US"
}
}
およびJava Beanは以下の通りです:
//Employee object class
public class Employee {
private int id;
private String name;
private String emailId;
private Address address;
..
}
//Address object class
public class Address {
private String address;
private String district;
private String city;
private String region;
private String postalCode;
private String country;
..
}
私は2つの異なるアダプターを持って、リードに()メソッドを複数のアダプタを統合したいです。
public class EmployeeAdapter extends TypeAdapter<Employee> {
@Override
public void write(JsonWriter out, Employee employee) throws IOException {
//
}
@Override
public Employee read(JsonReader jsonReader) throws IOException {
//read logic for employee class using AddressAdapter for address json
}
}
public class AddressAdapter extends TypeAdapter<Address> {
@Override
public void write(JsonWriter out, Address address) throws IOException {
//
}
@Override
public Address read(JsonReader jsonReader) throws IOException {
//read logic for Address class
}
}
EmployeeAdapterでAddressAdapterを使用するにはどうすればよいですか?
リーダーのデフォルトの実装を試しましたか?あるいは、あなた自身のアダプターを書く特別な理由がありますか? –
それはジャクソンにどのように関係していますか?タグを削除してください –
POJOマッピングが必要なように見えます。タイプアダプタは実際には過剰です。「final Employee employee = gson.fromJson(...、Employee.class)」と思われます。 –