カスタムマッピングを作成するだけです。あなたのJSONドキュメントはかなり複雑であるので、あなたは、自動マッピング・ジェネレータを試すことができますが、彼らは何らかの理由(動的特性、多型の値、不適切なcamelCaseNaming検出、など)のために失敗した場合、あなたは常にあなたのカスタムマッピングを作成することができます
final class Response {
@SerializedName("categories") final List<Category> categories = null;
@SerializedName("facettes") final List<Facet> facettes = null;
@SerializedName("productlistentries") final List<Map<String, Product>> productListEntries = null;
@SerializedName("last") final boolean isLast = Boolean.valueOf(false);
}
final class Category {
@SerializedName("amount") final int amount = Integer.valueOf(0);
}
final class Facet {
// ???
}
final class Product {
@SerializedName("name") final String name = null;
@SerializedName("modelNumber") final int modelNumber = Integer.valueOf(0);
@SerializedName("brandLogo") final String brandLogo = null;
@SerializedName("detailLink") final String detailLink = null;
@SerializedName("online") final boolean isOnline = Boolean.valueOf(false);
@SerializedName("imageURL") final String imageUrl = null;
@SerializedName("addToBasketUrl") final String addToBasketUrl = null;
@SerializedName("rating") final int rating = Integer.valueOf(0);
@SerializedName("ratingCount") final int ratingCount = Integer.valueOf(0);
@SerializedName("features") final List<Feature> features = null;
@SerializedName("price") final String price = null;
@SerializedName("vatLabel") final String vatLabel = null;
@SerializedName("fees") final List<Fee> fees = null;
@SerializedName("gtm") final Gtm gtm = null;
@SerializedName("productComparison") final ProductComparison productComparison = null;
@SerializedName("productWishlist") final ProductWishlist productWishlist = null;
@SerializedName("clubProduct") final boolean isClubProduct = Boolean.valueOf(false);
@SerializedName("onlineOnlyProduct") final boolean isOnlineOnlyProduct = Boolean.valueOf(false);
}
final class Feature {
@SerializedName("key") final String key = null;
@SerializedName("value") final String value = null;
}
final class Fee {
@SerializedName("value") final String value = null;
@SerializedName("dataLayer") final String dataLayer = null;
}
final class Gtm {
@SerializedName("name") final String name = null;
@SerializedName("id") final String id = null;
@SerializedName("price") final String price = null;
@SerializedName("brand") final String brand = null;
@SerializedName("category") final String category = null;
@SerializedName("dimension9") final String dimension9 = null;
@SerializedName("dimension10") final String dimension10 = null;
}
final class ProductComparison {
@SerializedName("dataLayer") final String dataLayer = null;
@SerializedName("dataUrl") final String dataUrl = null;
@SerializedName("text") final String text = null;
@SerializedName("additionalClasses") final String additionalClasses = null;
}
final class ProductWishlist {
@SerializedName("requestUrl") final String requestUrl = null;
@SerializedName("text") final String text = null;
}
マッピングを手作業で書くのに約15分かかったので、間違いやタイプミスがあるかもしれません。あなたの応答は読み取り専用で、手動で作成して他の場所に送るべきではないと仮定しているので、すべてのフィールドはfinal
と宣言されています。プリミティブフィールドに関する1つの発言:0
またはfalse
を使用すると、Javaコンパイラはコンパイル時の定数をインラインでインライン化できるため、Type.value(...)
は、javacがインライン化できないランタイム値だと考えるような不正行為です。 (ゲッターを生成したいかもしれませんが、単純なデータバッグのIMHOフィールドは使いやすく、ノイズを少なくします)。
Call<Map<String, Object>>
をCall<Response>
に変更するだけで済みます。バニラJavaで
例は、レトロフィットではない:
try (final Reader reader = getPackageResourceReader(Q43535942.class, "response.json")) {
final Response response = gson.fromJson(reader, Response.class);
System.out.println(response.productListEntries.get(1).get("3486143").imageUrl);
}
出力:
//picscdn.redblue.de/doi/pixelboxx-mss-70874441/mobile_220_310_png/CRUNCH-GTO-4125 - 最も高い%C3%A4rker-%28Class-D%29
上記のリンクは壊れています。 JSON文書を投稿できますか? –
私はそれが私のために働いている2つの異なるネットワークからリンクを試みた。私はそれを貼り付けますsomehwre – 4ndro1d
ちょうど同様にペーストビンのリンクを追加しました – 4ndro1d