Parsing a json which contains duplicate keys
If you are flexible with json library you can make use of net.sf.json.JSONObject
.
This library will retain the duplicated values by storing them into arrays. If multiple same keys are available it will create one key with all the values as Array.
And also the coding part is just a single line. Once you parsed the json using net.sf.json.JSONObject then you can supply this to jackson library.
JSONObject jsonObject = JSONObject.fromObject( "{ \"a\": \"a\", \"a\": { \"b\": {},\"b\": true}}" );
System.out.println( "net.sf.json.JSONObject: " + jsonObject );
JsonNode jsonNode = new ObjectMapper().readTree( jsonObject.toString() );
System.out.println( "com.fasterxml.jackson.databind.JsonNode" + jsonNode );
Output:
net.sf.json.JSONObject: {"a":["a",{"b":[{},true]}]}
com.fasterxml.jackson.databind.JsonNode{"a":["a",{"b":[{},true]}]}
Maven dependency of net.sf.json
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
You can use "jackson" library to read the json message token by token in a streaming way, then it would not eat anything form the message.