有没有办法让Jackson将单个JSON对象解释为具有一个元素的数组,反之亦然?
例如,我有2种略有不同的JSON格式,我需要两者都映射到相同的Java对象:
格式A(带有一个元素的JSON数组):
points : [ { date : 2013-05-11 value : 123 }]
格式B(JSON对象,是的,我知道它看起来“错误”,但这就是我给的):
points : { date : 2013-05-11 value : 123 }
以上两种都应转换为的目标Java对象:
//Data.java public List<Point> points; //other members omitted //Point.java class Point { public String date; public int value; }
当前,只有A可以正确解析为Data。我想避免直接篡改JSON本身。我可以篡改Jackson的某些配置以使其接受B吗?
尝试DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY-它应该为你工作。
DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY
例:
final String json = "{\"date\" : \"2013-05-11\",\"value\" : 123}"; final ObjectMapper mapper = new ObjectMapper() .enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY); final List<Point> points = mapper.readValue(json, new TypeReference<List<Point>>() {});