2016-04-18 3 views
0

Мне нужно преобразовать строку JSON в объект Java. У JSON будет несколько известных полей и некоторые неизвестные. Вот пример:JACKSON с JSON: отображение нераспознанных полей

public class MyJsonBean { 
    private String abc; 
    private String def; 

    // getters and setters 
} 

И JSON Я хочу разобрать:

{"abc":"value1","def":"value2","ghi":"value3","jkl":"value4"} 

только неподвижные поля "а" и "DEF". Другие поля являются переменными. Я бы хотел, чтобы Джексон проанализировал переменные поля и поместил их в список/карту в классе MyJsonBean. Есть ли способ сделать это?

+0

Использование '@ JsonAnySetter' в двух экземплярах, связанных, вы можете' put' эти значения в 'Map' или' add' к 'list' в зависимости от обстоятельств. – Savior

ответ

1

Использование @JsonAnySetter Вызывается десериализацией json для хранения элементов, не являющихся членами json-объекта. Сохраняет значение в поле otherAnnotations.

Джексон на самом деле может быть сделано, чтобы работать с такими POJOs: вот один из способов сделать это:

public class MyJsonBean 
{ 
    // Two mandatory properties 
    protected final String abc; 
    protected final String def; 

    // and then "other" stuff: 
    protected Map<String,Object> other = new HashMap<String,Object>(); 

    // Could alternatively add setters, but since these are mandatory 
    @JsonCreator 
    public MyJsonBean (@JsonProperty("abc") String abc, @JsonProperty("def") String def) 
    { 
     this.abc = abc; 
     this.def = def; 
    } 

    public int getId() { return id; } 
    public String getName() { return name; } 

    public Object get(String name) { 
     return other.get(name); 
    } 

    // "any getter" needed for serialization  
    @JsonAnyGetter 
    public Map<String,Object> any() { 
     return other; 
    } 

    @JsonAnySetter 
    public void set(String name, Object value) { 
     other.put(name, value); 
    } 
} 

И там у нас есть это: Сериализует и десериализует красиво.

Делите и наслаждайтесь ... :)

+0

точно ответ, который я искал !! Спасибо @Abdel :) –

Смежные вопросы