How to allow duplicate keys when using Jackson ObjectMapper

Viewed 1730

In the case of duplicates, ObjectMapper by default only keeps one of the elements as key. Namely, the last element will always be the one stored. For example:

{ "name" : "xyz", "name" : "abc" }

If we use ObjectMapper readTree on the above tree, it will drill down to:

--> ObjectMapper.readTree(<json-input>)

    --> ObjectMapper._readMapAndClose

        --> BaseNodeDeseralizer.deserializeObject

            --> JsonNode old = node.replace(key, value);    // replaces a key in case of duplicates

The above will add "name":"xyz" to the tree and then on the second run, replace it with "name":"abc".

There are configuration options to cause ObjectMapper to fail/spit error in case of duplicates. For Example:

mapper.enable(MapperFeature.IGNORE_DUPLICATE_MODULE_REGISTRATIONS);
mapper.enable(JsonParser.Feature.STRICT_DUPLICATE_DETECTION);
mapper.enable(DeserializationFeature.FAIL_ON_READING_DUP_TREE_KEY);

But I couldn't find a configuration option to ALLOW duplicates.

I have already attempted Overriding the deserializeObject method to not do a replace. But this seems unwise, since my overriden method will "fall away" from the library's method and I won't be able to pick up future updates/fixes.

My question is: Is ObjectMapper allowed to keep duplicate keys (given the data structure it uses)? If so, how?

0 Answers
Related