Search code examples
jsonsyntaxdelimiter

Can you use a trailing comma in a JSON object?


When manually generating a JSON object or array, it's often easier to leave a trailing comma on the last item in the object or array. For example, code to output from an array of strings might look like (in a C++ like pseudocode):

s.append("[");
for (i = 0; i < 5; ++i) {
    s.appendF("\"%d\",", i);
}
s.append("]");

giving you a string like

[0,1,2,3,4,5,]

Is this allowed?


Solution

  • Unfortunately the JSON specification does not allow a trailing comma. There are a few browsers that will allow it, but generally you need to worry about all browsers.

    In general I try turn the problem around, and add the comma before the actual value, so you end up with code that looks like this:

    s.append("[");
    for (i = 0; i < 5; ++i) {
      if (i) s.append(","); // add the comma only if this isn't the first entry
      s.appendF("\"%d\"", i);
    }
    s.append("]");
    

    That extra one line of code in your for loop is hardly expensive...

    Another alternative I've used when output a structure to JSON from a dictionary of some form is to always append a comma after each entry (as you are doing above) and then add a dummy entry at the end that has not trailing comma (but that is just lazy ;->).

    Doesn't work well with an array unfortunately.