rzrelyea
rzrelyea

Reputation: 1497

What is the convention in JSON for empty vs. null?

I know that in most programming scenarios, the preference is for empty collections to null collections when there are 0 elements. However, most languages that consume JSON (like JavaScript) will treat empty lists/objects as true and null ones as false. For example this would be both true and an object in JavaScript:

{
    "items_in_stock": {"widgets":10, "gadgets": 5}
}

But this is also true:

{
    "items_in_stock": {}
}

And this is false:

{
    "items_in_stock": null
}

Is there a convention on empty objects/lists for JSON? And what about for numbers, booleans, and strings?

Upvotes: 94

Views: 222428

Answers (4)

Dave
Dave

Reputation: 351

There is the question whether we want to differentiate between cases:

  1. "phone" : null = the value for "phone" was not set yet
  2. "phone" : "" = the value for "phone" was set and it is empty

If we want differentiate I would use null for this. Otherwise we would need to add a new field like "isAssigned" or so. This is an old database issue.

Upvotes: 8

Koen Peters
Koen Peters

Reputation: 12916

It is good programming practice to return an empty array [] if the expected return type is an array. This makes sure that the receiver of the json can treat the value as an array immediately without having to first check for null. It's the same way with empty objects using open-closed braces {}.

Strings, Booleans and integers do not have an 'empty' form, so there it is okay to use null values.

This is also addressed in Joshua Blochs excellent book "Effective Java". There he describes some very good generic programming practices (often applicable to other programming langages as well). Returning empty collections instead of nulls is one of them.

Here's a link to that part of his book:

http://jtechies.blogspot.nl/2012/07/item-43-return-empty-arrays-or.html

Upvotes: 94

Nik
Nik

Reputation: 9442

Empty array for empty collections and null for everything else.

Upvotes: 5

user5398447
user5398447

Reputation:

"JSON has a special value called null which can be set on any type of data including arrays, objects, number and boolean types."

"The JSON empty concept applies for arrays and objects...Data object does not have a concept of empty lists. Hence, no action is taken on the data object for those properties."

Here is my source.

Upvotes: 12

Related Questions