2016-08-09 11 views
2

私は以下のようにjsonの文字列を持っています。jsonの文字列を@keyを含むPOJOに変換します

{ 
    "input_index": 0, 
    "candidate_index": 0, 
    "delivery_line_1": "5461 S Red Cliff Dr", 
    "last_line": "Salt Lake City UT 84123-5955", 
    "delivery_point_barcode": "841235955990" 
} 

次のように、クラスのPOJOに変換したいと考えています。

public class Candidate { 

    @Key("input_index") 
    private int inputIndex; 

    @Key("candidate_index") 
    private int candidateIndex; 

    @Key("addressee") 
    private String addressee; 

    @Key("delivery_line_1") 
    private String deliveryLine1; 

    @Key("delivery_line_2") 
    private String deliveryLine2; 

    @Key("last_line") 
    private String lastLine; 

    @Key("delivery_point_barcode") 
    private String deliveryPointBarcode; 
} 

私は、以下のようにジャクソンを使用してPOJOするJSONに変換しようとしています。

ObjectMapper objectMapper = new ObjectMapper(); 

objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 

Candidate candidate = objectMapper.readValue(jsonString,Candidate.class); 

私はジャクソンが代わりに@keyに与えられた名前のJSON文字列に属性名を探しているので、私はPOJOのすべてのnull値を取得していたコードを実行します。 @Keyに基づいて値をマップするようにジャクソンに伝えるにはどうすればよいですか?

以前は@JsonPropertyを使用していましたが、pojoに変換する際に問題はありませんでした。 Candidateクラスはサードパーティによって提供され、属性の@key(com.google.api.client.util.Key)注釈を使用しています。だから私はクラスを変更することはできません。

+0

注意。 – chrylis

+0

あなたの助けに感謝chrylis。このPropertyNamingStrategyを使用している値はほんのわずかです。 – choom

答えて

1

使用このMavenのDEP:

<dependency> 
    <groupId>com.google.http-client</groupId> 
    <artifactId>google-http-client-jackson</artifactId> 
    <version>1.15.0-rc</version> 
</dependency> 

そして、このように変換:ジャクソンにあなただけの `PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES`を使用することができることを

Candidate candidate = JacksonFactory.getDefaultInstance().fromString(output,Candidate.class); 
+0

Ebrahimにお手伝いいただきありがとうございます。実際に私は候補者のリストを持っています。私はやっている リスト候補= Arrays.asList(新しいJacksonFactory()。fromString(jsonInString、候補[]。クラス)); エラーが発生しています。 JacksonFactoryを使ってオブジェクトのリストを変換する方法を知っていますか? – choom

+0

@choom 'List 'に変更してください。それは –

+0

のリスト候補[]の代わりに動作するはずですか? 声明全体をお願いしますか? – choom

0

クラスを変更できないと仮定して、GSONを使用して候補クラスに変換することもできます。あなたが持っているPOJOクラスの注釈を変更することができないので、のみをに提案しています。このものの

Gson gson = new Gson(); 

    String jsonInString = "{\"input_index\": 0,\"candidate_index\": 0,\"delivery_line_1\": \"5461 S Red Cliff Dr\",\"last_line\": \"Salt Lake City UT 84123-5955\",\"delivery_point_barcode\": \"841235955990\"}"; 

    Candidate candidate = gson.fromJson(jsonInString, Candidate.class); 

    System.out.println(candidate); 

は、あなたがソースPOJOに、この場合のほとんどをカバーしているGSONを使用して、あなたが持っているJACKSON注釈やオブジェクトマッパーのための代替ではありませんあなたはまた、次のようにJacksonFactory使用することができます

編集を提供

import com.google.api.client.json.jackson.JacksonFactory; 

    Candidate candidate2 = new JacksonFactory().fromString(jsonInString, Candidate.class); 

    System.out.println(candidate2); 
+0

あなたの助けに感謝Ramachandran。実際に私は候補者のリストを持っています。私はやっている リスト候補= Arrays.asList(新しいJacksonFactory()。fromString(jsonInString、候補[]。クラス)); エラーが発生しています。 JacksonFactoryを使ってオブジェクトのリストを変換する方法を知っていますか? – choom

関連する問題