Existe-t-il une norme de nommage JSON? Je vois la plupart des exemples utilisant tous les minuscules séparés par un trait de soulignement (lower_case). Mais pouvez-vous utiliser PascalCase ou camelCase?
Existe-t-il une norme de nommage JSON? Je vois la plupart des exemples utilisant tous les minuscules séparés par un trait de soulignement (lower_case). Mais pouvez-vous utiliser PascalCase ou camelCase?
Réponses:
Il n'y a pas de norme SINGLE, mais j'ai vu 3 styles que vous mentionnez ("Pascal / Microsoft", "Java" ( camelCase
) et "C" (traits de soulignement, snake_case
)) - ainsi qu'au moins un autre, kebab-case
comme longer-name
).
Cela semble surtout dépendre de la formation des développeurs du service en question; ceux qui ont des antécédents en c / c ++ (ou des langues qui adoptent des noms similaires, qui incluent de nombreux langages de script, ruby, etc.) choisissent souvent une variante de soulignement; et se reposer de la même manière (Java vs .NET). La bibliothèque Jackson mentionnée, par exemple, suppose la convention de dénomination du bean Java ( camelCase
)
MISE À JOUR: ma définition de "standard" est une convention UNIQUE. Ainsi, alors que l'on pourrait affirmer "oui, il existe de nombreuses normes", pour moi il y en a plusieurs Naming Conventions
, dont aucune n'est "La" norme dans son ensemble. L'un d'eux pourrait être considéré comme la norme pour une plate-forme spécifique, mais étant donné que JSON est utilisé pour l'interopérabilité entre plates-formes qui peut ou non avoir beaucoup de sens.
Dans ce document Google JSON Style Guide (recommandations pour la création d'API JSON chez Google),
Il recommande que:
Les noms de propriété doivent être des chaînes ASCII camelCased .
Le premier caractère doit être une lettre, un trait de soulignement (_) ou un signe dollar ($).
Exemple:
{
"thisPropertyIsAnIdentifier": "identifier value"
}
Mon équipe suit cette convention.
Property Name Guidelines->Property Name Format->Choose meaningful property names.
.
Il n'y a pas de dénomination standard des clés dans JSON . Selon la section Objets de la spécification:
La syntaxe JSON n'impose aucune restriction sur les chaînes utilisées comme noms, ...
Ce qui signifie que camelCase ou snake_case devraient fonctionner correctement .
Imposer une convention de dénomination JSON est très déroutant. Cependant, cela peut facilement être compris si vous le décomposez en composants.
Langage de programmation pour générer du JSON
JSON lui-même n'a pas de nom standard pour les clés
Langage de programmation pour l'analyse JSON
snake_case aura toujours du sens pour ceux qui ont des entrées Java car les bibliothèques JSON existantes pour Java utilisent uniquement des méthodes pour accéder aux clés au lieu d'utiliser la dot.syntax standard . Cela signifie que cela ne ferait pas de mal à Java d'accéder aux clés snake_cased par rapport à l'autre langage de programmation qui peut faire la dot.syntax .
Exemple pour le package Javaorg.json
JsonObject.getString("snake_cased_key")
Exemple pour le package Javacom.google.gson
JsonElement.getAsString("snake_cased_key")
Le choix de la bonne convention de dénomination JSON pour votre implémentation JSON dépend de votre pile technologique. Il existe des cas où l'on peut utiliser snake_case , camelCase ou toute autre convention de dénomination.
Une autre chose à considérer est le poids à mettre sur le générateur JSON par rapport à l'analyseur JSON et / ou le JavaScript frontal. En général, plus de poids devrait être mis du côté du générateur JSON plutôt que du côté de l'analyseur JSON. En effet, la logique métier réside généralement du côté du générateur JSON.
De plus, si le côté analyseur JSON est inconnu, vous pouvez déclarer ce qui peut fonctionner pour vous.
"Person":
n'est pas camelCase :)
Notamment pour moi sur NodeJS, si je travaille avec des bases de données et que mes noms de champs sont séparés par des traits de soulignement, je les utilise également dans les clés de structure.
C'est parce que les champs db ont beaucoup d'acronymes / abréviations, donc quelque chose comme appSNSInterfaceRRTest semble un peu désordonné mais app_sns_interface_rr_test est plus agréable.
En Javascript, les variables sont toutes camelCase et les noms de classe (constructeurs) sont ProperCase, donc vous verrez quelque chose comme
var devTask = {
task_id: 120,
store_id: 2118,
task_name: 'generalLedger'
};
ou
generalLedgerTask = new GeneralLedgerTask( devTask );
Et bien sûr, dans JSON, les clés / chaînes sont entourées de guillemets doubles, mais ensuite vous utilisez simplement JSON.stringify et passez dans les objets JS, donc ne vous inquiétez pas.
J'ai un peu lutté avec cela jusqu'à ce que je trouve ce juste milieu entre les conventions de nommage JSON et JS.
org.json
, gson
. La réception des données de snake_case ne fait pas si mal que ça ...JSONObject.get('snake_case_key_here')
Il semble qu'il y ait suffisamment de variations pour que les gens se mettent en quatre pour permettre la conversion de toutes les conventions vers d'autres: http://www.cowtowncoder.com/blog/archives/cat_json.html
Notamment, l'analyseur Jackson JSON mentionné préfère bean_naming
.
beanNaming
.
Je pense qu'il n'y a pas de convention de dénomination officielle pour JSON, mais vous pouvez suivre certains leaders de l'industrie pour voir comment cela fonctionne.
Google, qui est l'une des plus grandes sociétés informatiques du monde, dispose d'un guide de style JSON: https://google.github.io/styleguide/jsoncstyleguide.xml
En profitant, vous pouvez trouver d'autres guides de styles, que Google définit, ici: https://github.com/google/styleguide
Comme d'autres l'ont dit, il n'y a pas de norme, vous devez donc en choisir une vous-même. Voici quelques éléments à considérer lors de cette opération:
Si vous utilisez JavaScript pour consommer JSON, l'utilisation de la même convention de dénomination pour les propriétés des deux fournira une cohérence visuelle et éventuellement des opportunités de réutilisation du code plus propre.
Une petite raison pour éviter la casse kebab est que les tirets peuvent se heurter visuellement avec les -
caractères qui apparaissent dans les valeurs.
{
"bank-balance": -10
}