Haga que Jackson interprete un solo objeto JSON como matriz con un elemento

¿Hay alguna manera de hacer que Jackson interprete un solo objeto JSON como una matriz con un elemento y viceversa?

Ejemplo, tengo 2 formatos ligeramente diferentes de JSON, necesito que ambos se correlacionen con el mismo objeto Java:

Formato A (matriz JSON con un elemento):

points : [ { date : 2013-05-11 value : 123 }] 

Formato B (objeto JSON, sí, sé que se ve “mal”, pero es lo que me dieron):

 points : { date : 2013-05-11 value : 123 } 

Destino del objeto Java que ambos de los anteriores deben convertir a:

 //Data.java public List points; //other members omitted //Point.java class Point { public String date; public int value; } 

Actualmente, solo A analizará correctamente los datos. Quiero evitar directamente la alteración del JSON. ¿Hay alguna configuración en Jackson que pueda alterar para que acepte B ?

Pruebe con DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY : debería funcionar para usted.

Ejemplo:

 final String json = "{\"date\" : \"2013-05-11\",\"value\" : 123}"; final ObjectMapper mapper = new ObjectMapper() .enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY); final List points = mapper.readValue(json, new TypeReference>() { }); System.out.println(points); 

La versión compatible con Jackson 1.x utiliza DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY . Entonces la respuesta anterior cambia a:

 final String json = "{\"date\" : \"2013-05-11\",\"value\" : 123}"; final ObjectMapper mapper = new ObjectMapper() .enable(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY); final List points = mapper.readValue(json, new TypeReference>() { }); System.out.println(points); 

Puede resolver el problema anterior mediante este código que se proporciona a continuación, esto funciona

  final ObjectMapper objectMapper = new ObjectMapper().enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY); objectMapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT); try { String jsonInString = objectMapper.writeValueAsString(products.get(j)); InventoryParser inventoryParser = objectMapper.readValue(jsonInString, InventoryParser.class); System.out.println(inventoryParser.getId()); } catch (IOException e) { e.printStackTrace(); } 

“InventoryParser” es una clase POJO. “products.get (j)” es JSON String.