Does JSON syntax allow duplicate keys in an object?

The short answer: Yes but is not recommended.

The long answer: It depends on what you call valid…

[ECMA-404][1] “The JSON Data Interchange Syntax” doesn’t say anything about duplicated names (keys).

However, [RFC 8259][2] “The JavaScript Object Notation (JSON) Data Interchange Format” says:

The names within an object SHOULD be unique.

In this context SHOULD must be understood as specified in BCP 14:

SHOULD This word, or the adjective “RECOMMENDED”, mean that there
may exist valid reasons in particular circumstances to ignore a
particular item, but the full implications must be understood and
carefully weighed before choosing a different course.

[RFC 8259][2] explains why unique names (keys) are good:
> An object whose names are all unique is interoperable in the sense
> that all software implementations receiving that object will agree on
> the name-value mappings. When the names within an object are not
> unique, the behavior of software that receives such an object is
> unpredictable. Many implementations report the last name/value pair
> only. Other implementations report an error or fail to parse the
> object, and some implementations report all of the name/value pairs,
> including duplicates.


Also, as Serguei pointed out in the comments: ECMA-262 “ECMAScript® Language Specification”, reads:

In the case where there are duplicate name Strings within an object, lexically preceding values for the same key shall be overwritten.

In other words, last-value-wins.


Trying to parse a string with duplicated names with the Java implementation by Douglas Crockford (the creator of JSON) results in an exception:

org.json.JSONException: Duplicate key "status"  at
org.json.JSONObject.putOnce(JSONObject.java:1076)

Leave a Comment