2011-09-25 12 views
1

JSONの解析にはthis twitter API users/show responseのように、私はJacksonとGsonのJavaライブラリをこの作業を行うための候補として使用してきました。私はJSONのプロパティの小さなサブセットにしか興味がないので、Gsonは非常に簡潔な構文のためうまくいましたが、Gsonを使用し続けるために内部的な戦いを失いつつあります.Jsonは既にアプリケーションのどこかで使用されており、より良いパフォーマンス(私はそれがGsonを失う良い理由の両方であると認めている)。 Gsonのための唯一のコードは、これは私にはかなりいいです一行、単純なデシリアライゼーションのためのJackson対Gson

TwitterUser user = new Gson().fromJson(jsonStr, TwitterUser.class); 

で構築するために必要な

public class TwitterUser { 
private String id_str; 
private String screen_name; 

public String getId_str() { 
    return id_str; 
} 

public void setId_str(String id_str) { 
    this.id_str = id_str; 
} 

public String getScreen_name() { 
    return screen_name; 
} 

public void setScreen_name(String screen_name) { 
    this.screen_name = screen_name; 
} 
} 

のようなPOJOのために

。あなたが望むプロパティを選ぶことができます。一方、Jacksonは選択したフィールドからPOJOを構築するのに少し面倒です。

Map<String,Object> userData = new ObjectMapper().readValue(jsonStr, Map.class); 
//then build TwitterUser manually 

または

TwitterUser user = new ObjectMapper().readValue(jsonStr, TwitterUser.class); 
//each unused property must be marked as ignorable. Yikes! For 30 odd ignored fields thats too much configuration. 

だから長いったらしい説明した後、私は上記の立証されているよりも少ないコードでジャクソンを使用することができます方法はありますか?

+0

1つの注意:あなたは間違いなく新しいObjectMapperたびに作成したくない - のいずれかのインスタンスを注入するシングルトン、またはGuiceのを使用しています。幸いなことに、主な問題は以下にも答えました! – StaxMan

+0

@StaxManはい、コードサンプルの完全性のためだけでした。 – markdsievers

答えて

4

Jacksonレベルでは、クラスレベルの@JsonIgnorePropertiesアノテーションを使用すると、未知のフィールドを暗黙に無視することができます(ignoreUnknownをtrueに設定)。

@JsonIgnoreProperties(ignoreUnknown = true) 
public class TwitterUser { 
    // snip... 
} 
+2

<額を叩く>このマットのおかげで、魅力的に働いた。さようなら、それが続く間は楽しいものでした。 – markdsievers

+0

ちょっとしたGoogleが長い道のりを走っている '):' ' –

関連する問題