DZone
Web Dev Zone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
  • Refcardz
  • Trend Reports
  • Webinars
  • Zones
  • |
    • Agile
    • AI
    • Big Data
    • Cloud
    • Database
    • DevOps
    • Integration
    • IoT
    • Java
    • Microservices
    • Open Source
    • Performance
    • Security
    • Web Dev
DZone > Web Dev Zone > Duplicate Keys in JSON Objects

Duplicate Keys in JSON Objects

To send duplicate keys in our JSON request or not to send duplicate keys in our JSON request? That is the question. But, what is the answer? As you'll find out below, it really all depends...

Chamal Nanayakkara user avatar by
Chamal Nanayakkara
·
May. 18, 16 · Web Dev Zone · Analysis
Like (2)
Save
Tweet
59.35K Views

Join the DZone community and get the full member experience.

Join For Free

We came across a strange problem when building a new RESTful API recently. If we sent duplicate keys in our JSON request, how should the API handle it? Shouldn’t that request be rejected straight away as invalid JSON? Are duplicate keys even allowed in JSON? I did a bit of digging around to clear up this debate, and this is what I found...

RFC-7159, the current standard for JSON published by the Internet Engineering Task Force (IETF), states "The names within an object SHOULD be unique". Sounds pretty clear, right? However, according to RFC-2119 which defines the terminology used in IETF documents, the word "should" in fact means "... 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." So, things just got a bit more confusing. What this essentially means is that while having unique keys is recommended, it is not a must. We can have duplicate keys in a JSON object, and it would still be valid.

// Despite the firstName key being repeated, this is still valid JSON
{
  "id" : 001,
  "firstName" : "John",
  "firstName" : "Jane", 
  "lastName" : "Doe"
}

The validity of duplicate keys in JSON is an exception and not a rule, so this becomes a problem when it comes to actual implementations. In the typical object-oriented world, it’s not easy to work with duplicate key value pairs, and the standard does not define how a deserializer/parser should handle such objects. An implementation is free to choose its own path, and the behaviour is completely unpredictable from one library to another.

For example, a parser may take only the last value present in the object for a particular key and ignore the previous ones. It could also return all the key-value pairs, or it may even reject the JSON with a parsing error, and all of these behaviours would be valid. That said, most popular implementations (including the ECMAScript specification which is implemented in modern browsers) follow the rule of taking only the last key-value pair, but there is always the possibility of another library handling it in a different way. In our case, we went with the last key option, but there may be use cases where that is not acceptable and you may want to disallow duplicate keys altogether.

This kind of difference in behaviour can be problematic particularly in modern polyglot architectures, where the behaviour of different services should ideally be as consistent as possible. It may be unlikely that such a scenario would actually occur, but if and when it does, it would definitely help to know how your applications behave and have it documented as such for your consumers and fellow developers.

JSON Object (computer science)

Published at DZone with permission of Chamal Nanayakkara. See the original article here.

Opinions expressed by DZone contributors are their own.

Popular on DZone

  • A Brief History of JavaScript
  • What Is the Difference Between SAST, DAST, and IAST?
  • Comparing Approaches to Durability in Low Latency Messaging Queues
  • How to Integrate a Distributed Database With Event Streaming

Comments

Web Dev Partner Resources

X

ABOUT US

  • About DZone
  • Send feedback
  • Careers
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • MVB Program
  • Become a Contributor
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 600 Park Offices Drive
  • Suite 300
  • Durham, NC 27709
  • support@dzone.com
  • +1 (919) 678-0300

Let's be friends:

DZone.com is powered by 

AnswerHub logo