2016-12-23 2 views
4

У меня есть POJO, у которого есть внутренняя карта. Я хочу, чтобы это deserialize в HashMap из моего JSON, но Джексон десериализует внутреннюю карту от JSON в LinkedHashMap. Я могу заставить его использовать HashMap, изменив тип карты с «Карта» на «HashMap», но я хочу знать, есть ли способ сказать Джексону deserialize в конкретную реализацию Карты?Jackson JSON object mapper deserializes to LinkedHashMap вместо HashMap

Вот JSON:

{ 
    "transforms": { 
     "variable_name1": [{ 
      "min": 100, 
      "max": 200, 
      "value": 0.6 
     }], 
     "variable_name2": [{ 
      "min": 100, 
      "max": 200, 
      "value": 0.6 
     }], 
     "variable_name3": [{ 
      "min": 100, 
      "max": 200, 
      "value": 0.6 
     }] 
    } 
} 

А класс Трансформации:

public class Transformer { 
    Map<String, List<Transform>> transforms; 

    public Transformer() { 
     transforms = new HashMap<String, List<Transform>>(); 
    } 

    public void setTransforms(Map<String, List<Transform>> transforms) { 
     this.transforms = transforms; 
    } 
} 

Как я использую ObjectMapper:

try(Reader reader = new InputStreamReader(TransformTester.class.getResourceAsStream("transforms.json"), "UTF-8")) { 
      ObjectMapper objMapper = new ObjectMapper(); 
      Transformer tr = objMapper.readValue(reader, Transformer.class); 
} 
+1

Зачем вам все это? –

+3

Джексон использует 'LinkedHashMap', чтобы почтить порядок полей от JSON. Что не так с этим? – Andreas

+0

@ Аndreas Нет лишних накладных расходов с LinkedHashMap? Меня не волнует порядок. – Seephor

ответ

0

Если вы хотите какой-либо другой тип, вы может реализовать конвертер Jackson и аннотировать свой класс с ним.

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