2017-04-19 9 views
0

なしの逆シリアル化アレイは、私がshipcloud.ioから、次のJSONレスポンスを持っている:ジャクソン - プロパティ名

[ 
    { 
    "name": "dhl", 
    "display_name": "Deutsche Post DHL", 
    "services": [ 
     "standard", 
     "returns", 
     "one_day", 
     "one_day_early" 
    ], 
    "package_types": [ 
     "parcel", 
     "bulk" 
    ] 
    }, 
    { 
    "name": "dpag", 
    "display_name": "Deutsche Post", 
    "services": [ 
     "standard" 
    ], 
    "package_types": [ 
     "letter", 
     "parcel_letter", 
     "books" 
    ] 
    }, 
    { 
    "name": "dpd", 
    "display_name": "DPD - Dynamic Parcel Distribution", 
    "services": [ 
     "standard", 
     "returns", 
     "one_day", 
     "one_day_early" 
    ], 
    "package_types": [ 
     "parcel", 
     "parcel_letter" 
    ] 
    } 
] 

は、どのように私はジャクソンで、このJSON配列をデシリアライズすることができますか?通常は単純なPOJOを使用し、リスト/配列のプロパティ名(@JsonProperty( "blub")など)を と定義します。問題は、ここで使用されているプロパティ名がないことです... 空のプロパティ名を使用して試しましたが、機能しませんでした。 私は、このエラーメッセージが出てい:そう、あなたがタイプの複数のオブジェクトをデシリアライズしている

ObjectMapper mapper = new ObjectMapper(); 
mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, false); 

答えて

1

あなたがjacksonを使用したい場合は、これは私のために機能するソリューションですあなたは、あなたがその場でそれをインスタンス化でき、この

// somewhere in an example TypeReferences class 
public static final TypeReference<List<Response.CarriersResponse>> CARRIER_RESPONSES = new TypeReference<List<Response.CarriersResponse>>() { 
}; 

// elsewhere where you're calling the mapper 
List<Response.CarriersResponse> responses = mapper.readValue(text, TypeReferences.CARRIER_RESPONSES); 

のように、リストとしてそれを実行する必要があり、それは、総メモリ消費量対性能の間の設計上の決定です。

0

Can not deserialize instance of Response.CarriersResponse out of 
START_ARRAY token 
+0

この方法でうまく動作します。 –

0

Response.CarriersResponse[]クラスにデシリアライズしてください。

Response.CarriersResponse[] responses = mapper.readValue(text, Response.CarriersResponse[].class); 
関連する問題