Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JSON duplicated properties validation via Jackson

I use Jackson and want to check that input JSON string doesn't contain duplicated properties like:

{"a" : 1, "a" : 0}

Following Jackson fragment process input string without any errors and even return value:

JsonNode jsonSelect = mapper.readTree("{ A : 1, A : 0}"); System.out.println(jsonSelect.getFieldValue("A")); // prints 0

Does I have a chance to validate duplicates via Jackson?

P.S. Does JSON format support duplicated properties at all? I didn't find any restrictions about it in specification. Also org.json.JSONObject throws an exception for duplicates that doesn't give me an answer - is {"a" : 1, "a" : 0} well-formed according to standard.

like image 362
Raman Avatar asked Nov 27 '25 09:11

Raman


1 Answers

JSON specification indicates duplicates are not consider valid, but parsers are not required to do anything about them. From practical perspective, keeping track of all seen properties adds overhead, which may not make sense at streaming parser level.

As to Jackson, it used to have duplicate detection at data binding level, but I think that is not enabled at this point. It could be added fairly easily when dealing with Maps. If this is something you would want, filing a feature request or asking on user list might make sense (esp. to see if others would want this feature too, making it more likely to get added soon).

If all you want to do is just validation, you could create a Map subclass, make it throw exception on duplicate. Or, just set a flag in sub-class that you can check if you prefer.

like image 148
StaxMan Avatar answered Nov 28 '25 23:11

StaxMan