Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JSON Naming Convention (snake_case, camelCase or PascalCase) [closed]

Is there a standard on JSON naming?
I see most examples using all lower case separated by underscore, aka snake_case, but can it be used PascalCase or camelCase as well?

like image 789
GeorgeU Avatar asked Apr 04 '11 19:04

GeorgeU


People also ask

Is JSON a camel case?

Languages Using JSON It basically follows the logic that you consider the languages being used to generate or parse the JSON. It makes the case that Python and PHP favor snake case, whereas Java and JavaScript favor camel case.

What is snake_case naming style?

Snake case (stylized as snake_case) refers to the style of writing in which each space is replaced by an underscore (_) character, and the first letter of each word is written in lowercase. It is a commonly used naming convention in computing, for example for variable and subroutine names, and for filenames.

Should JSON be uppercase or lowercase?

SQL, by default, is case insensitive to identifiers and keywords, but case sensitive to data. JSON is case sensitive to both field names and data.

Does JSON use snake case?

Snake case is the standard naming convention in some programming languages, like Python and Ruby. Thus, is pretty common to see snake_case used for JSON properties.


3 Answers

In this document Google JSON Style Guide (recommendations for building JSON APIs at Google),

It recommends that:

  1. Property names must be camelCased, ASCII strings.

  2. The first character must be a letter, an underscore (_), or a dollar sign ($).

Example:

{
  "thisPropertyIsAnIdentifier": "identifier value"
}

My team consistently follows this convention when building REST APIs. There are some reasons:

  • First, the JSON convention should be independent of the programming languages because we want our APIs to be consistent doesn't matter whether there are some APIs implemented using a camelCase language (e.g. Java), some others using snake_case language (e.g. Python).
  • Also, most of our clients are webapp so camelCase is preferred
  • If the client prefers snake_case, it still can easily convert data between snake_case and camelCase (with the help of libraries)

But I agree that if all the applications use the same type of language (e.g. snake_case), the JSON convention should also follow.

like image 60
Tho Avatar answered Oct 23 '22 22:10

Tho


There is no SINGLE standard, but I have seen 3 styles you mention ("Pascal/Microsoft", "Java" (camelCase) and "C" (underscores, snake_case)) -- as well as at least one more, kebab-case like longer-name).

It mostly seems to depend on what background developers of the service in question had; those with c/c++ background (or languages that adopt similar naming, which includes many scripting languages, ruby etc) often choose underscore variant; and rest similarly (Java vs .NET). Jackson library that was mentioned, for example, assumes Java bean naming convention (camelCase)

UPDATE: my definition of "standard" is a SINGLE convention. So while one could claim "yes, there are many standards", to me there are multiple Naming Conventions, none of which is "The" standard overall. One of them could be considered the standard for specific platform, but given that JSON is used for interoperability between platforms that may or may not make much sense.

like image 33
StaxMan Avatar answered Oct 23 '22 21:10

StaxMan


ECMA-404

The JSON syntax does not impose any restrictions on the strings used as names,...

There is no standard naming of keys in JSON and that camelCase or snake_case should work fine.

TL;DR

Here is a rule-of-a-thumb which I think most of the developers use.

Technology stack Naming convention Reason/guide
Python » JSON » Python snake_case Unanimous
Python » JSON » PHP snake_case Unanimous
Python » JSON » Java snake_case or camelCase Lean on where the business logic resides. Take advantage of the extrinsic style of Java.
Python » JSON » back‑end JavaScript snake_case or camelCase Lean on where the business logic resides.
Python » JSON » front‑end JavaScript snake_case Screw the front-end anyway
Python » JSON » you do not know snake_case Screw the parser anyway
PHP » JSON » Python snake_case Unanimous
PHP » JSON » PHP snake_case Unanimous
PHP » JSON » Java snake_case or camelCase Lean on where the business logic resides. Take advantage of the extrinsic style of Java.
PHP » JSON » back‑end JavaScript snake_case or camelCase Lean on where the business logic resides.
PHP » JSON » front‑end JavaScript snake_case Screw the front-end anyway
PHP » JSON » you do not know snake_case Screw the parser anyway
Java » JSON » Python camelCase or snake_case Lean on where the business logic resides. Take advantage of the extrinsic style of Java.
Java » JSON » PHP camelCase or snake_case Lean on where the business logic resides. Take advantage of the extrinsic style of Java.
Java » JSON » Java camelCase Unanimous
Java » JSON » JavaScript camelCase Unanimous
Java » JSON » you do not know camelCase Screw the parser anyway
back‑end JavaScript » JSON » Python camelCase or snake_case Lean on where the business logic resides.
front‑end JavaScript » JSON » Python snake_case Screw the front-end anyway
back‑end JavaScript » JSON » PHP camelCase or snake_case Lean on where the business logic resides.
front‑end JavaScript » JSON » PHP snake_case Screw the front-end anyway
JavaScript » JSON » Java camelCase Unanimous
JavaScript » JSON » JavaScript camelCase Original
JavaScript » JSON » you do not know camelCase Screw the parser anyway

Driving factors

Imposing a naming convention is very confusing because JSON alone does not impose a standard. However, this can easily be figured out if you break it down into components.

JSON generator

Programming language Naming convention
Python snake_case
PHP snake_case
Java camelCase
JavaScript camelCase

JSON parser

Programming language Naming convention
Python snake_case
PHP snake_case
Java camelCase
JavaScript camelCase

Bulk of business logic

You have to decide which side has the heavier business logic, is it the JSON generator side or the JSON parser side?

Natural belongingness

Programming language Natural belongingness
Python intrinsic
PHP intrinsic
Java extrinsic
JavaScript intrinsic

Intrinsic - Programming language where JSON is accessed naturally similar to accessing native objects and arrays.

Extrinsic - Programming language where JSON is accessed differently than accessing native objects and arrays. Below is an example of Java's com.google.gson package:

/**
 * Using a method to access a property instead of using the standard 'dot.syntax'
 */
JsonElement.getAsString("snake_cased_key");

Some actual implementations

  • Google Maps JavaScript API - camelCased
  • Facebook JavaScript API - snake_cased
  • Amazon Web Services - snake_cased & camelCased
  • Twitter API - snake_cased
  • JSON-LD - camelCased

Conclusions

Choosing the right JSON naming convention for your JSON implementation depends on your technology stack. There are cases where you can use snake_case, camelCase, or any other naming convention.

Another thing to consider is the weight to be put on the JSON-generator vs the JSON-parser and/or the front-end JavaScript. In general, more weight should be put on business logic side.

Also, if the JSON-parser side is unknown then you can declare what ever can work for you.

like image 336
Abel Callejo Avatar answered Oct 23 '22 21:10

Abel Callejo