2016-08-06 4 views
0

Этот вопрос Дубликат Link, код используется как:Джексон: Store несомый объект JSON в качестве JSONObject

ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); 
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false); 
Car car = mapper.readValue(new File("fileName"), Car.class); 

Но settings, как указано в ссылке, значение приходит как {}. Как решить эту проблему? Я хочу использовать вложенный объект как JSONObject.

+0

Попробуйте использовать аннотации '@ JsonAnySetter' и' @ JsonAnyGetter' [здесь] (http://www.programcreek.com/java-api-examples/index.php?api=com.fasterxml.jackson.annotation.JsonAnySetter) пример того, как его использовать. –

+0

@MarioAlexandroSantini Я попробовал ** Example1 ** из предоставленной вами ссылки. Но он также устанавливает остальную часть поля, которая не находится в POJO 'Car'. Мне просто нужен объект, который находится под ключ 'setting' (который является' JSONObject') –

ответ

0

Прежде всего, вы имеете в виду JSONObject, который является стандартным от Java EE 7 и не JSONObject, что в Android.

Даже в той ссылке, которую вы предоставляете, они говорят об этом.

чем, вот мой пример автомобиля:

пакет org.mas.examples.jackson.models;

import com.fasterxml.jackson.annotation.JsonAnySetter; 
import com.fasterxml.jackson.annotation.JsonIgnore; 
import com.fasterxml.jackson.annotation.JsonProperty; 

import javax.json.JsonObject; 

public class Car { 

    @JsonProperty(value="id") 
    private long id; 

    @JsonProperty(value="name") 
    private String name; 

    @JsonIgnore 
    private JsonObject settings; 

    public void setId(long id) { 
     this.id = id; 
    } 

    public long getId() { 
     return this.id; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getName() { 
     return this.name; 
    } 

    public void setSettings(JsonObject settings) { 
     this.settings = settings; 
    } 

    public JsonObject getSettings() { 
     return settings; 
    } 

    @JsonAnySetter 
    public void setJsonProperty(String key, Object value) { 

     if ("settings".equals(key)) { 

      System.out.println("Got it " + key + " value: " + value); 

      /* JsonObject settings = ....; create here your JsonObject */ 

     } else { 
      System.out.println(key + " value: " + value); 
     } 

    } 
} 

Если запустить тест так:

ObjectMapper objectMapper = new ObjectMapper(); 
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 

try { 
    Car car = objectMapper.readValue(json, Car.class); 

    System.out.println("Load a car: " + car.getName()); 

} catch (IOException e) { 
    e.printStackTrace(); 
} 

Вы собираетесь получить следующий результат:

Got it settings value: {color=#ff0000} 
Load a car: test 

Так что работать только на настройках, как описано в Jackson Аннотация doc:

@JsonAnySetter: аннотацию используется для определения метода с двумя аргументами, как «любой сеттер», используемый для десериализации значений иначе неотображенного JSON Свойства

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