2011-09-25 5 views
1

Для разбора JSON как this twitter API users/show response Я использую библиотеки Jackson и Gson Java в качестве кандидатов для выполнения этой работы. Меня интересует только небольшое подмножество свойств JSON, поэтому Гсн был хорош из-за его очень сжатого синтаксиса, но я теряю внутреннюю битву, чтобы продолжать использовать Gson, поскольку Джексон уже используется в другом месте нашего приложения, и он документировал лучшая производительность (которую я признаю, являются и хорошими причинами, чтобы потерять Gson).Jackson vs Gson для простой десериализации

Для POJO как

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; 
} 
} 

Единственный код Gson, необходимых для создания это одна линия,

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

Это очень хорошо для меня; хорошо масштабируется и выбирает нужные свойства. С другой стороны, Джексон немного более трудоемкий для создания 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

Еще одно замечание: вы определенно не хотите, чтобы создать новую ObjectMapper каждый раз - либо использовать синглтон, или Guice внедрить экземпляр. К счастью, основную проблему также ответили ниже! – StaxMan

+0

@StaxMan Yup, был только для полноты образца кода. – markdsievers

ответ

4

С помощью Jackson 1.4+ вы можете использовать аннотацию @JsonIgnoreProperties на уровне классов, чтобы молча игнорировать неизвестные поля, с ignoreUnknown установлен в true.

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

Спасибо за это Мэтт, работал как шарм. До свидания, Джун, это было весело, пока оно продолжалось. – markdsievers

+0

Немного Google идет длинный путь ':)' –