How to parse into list of pairs from json with FasterXML
You should write a custom serializer/deserializer for the Pair class.
Here is an example:
public class JacksonPair { static final String JSON = "{ \"x\" : 1, \n" + " \"y\" : 2, \n" + " \"the_list\" : [[1,2],[3,4]]}"; static class Demo { public int x; public int y; public List<Pair<Integer, Integer>> the_list; @Override public String toString() { return "Demo{" + "x=" + x + ", y=" + y + ", the_list=" + the_list + '}'; } } static class PairSerializer extends JsonSerializer<Pair> { @Override public void serialize( Pair pair, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeStartArray(2); jsonGenerator.writeObject(pair.getLeft()); jsonGenerator.writeObject(pair.getRight()); jsonGenerator.writeEndArray(); } } static class PairDeserializer extends JsonDeserializer<Pair> { @Override public Pair deserialize( JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException { final Object[] array = jsonParser.readValueAs(Object[].class); return Pair.of(array[0], array[1]); } } public static void main(String[] args) throws IOException { final SimpleModule module = new SimpleModule(); module.addSerializer(Pair.class, new PairSerializer()); module.addDeserializer(Pair.class, new PairDeserializer()); final ObjectMapper objectMapper = new ObjectMapper(); objectMapper.registerModule(module); final Demo demo = objectMapper.readValue(JSON, Demo.class); System.out.println("toString: " + demo); System.out.println("Input: " + JSON); System.out.println("Output: " + objectMapper.writeValueAsString(demo)); }}
Output:
toString: Demo{x=1, y=2, the_list=[(1,2), (3,4)]}Input: { "x" : 1, "y" : 2, "the_list" : [[1,2],[3,4]]}Output: {"x":1,"y":2,"the_list":[[1,2],[3,4]]}