web-dev-qa-db-fra.com

Convention de nommage JSON

Existe-t-il une norme sur le nommage JSON? Je vois la plupart des exemples utilisant toutes les minuscules séparées par un trait de soulignement (lower_case). Mais pouvez-vous utiliser PascalCase ou camelCase?

323
GeorgeU

Il n’existe pas de norme SINGLE, mais j’ai vu 3 styles que vous mentionnez ("Pascal/Microsoft", "Java" (camelCase) et "C" (underscores, snake_case)) - ainsi que au moins un de plus, kebab-case comme longer-name).

Cela semble dépendre principalement de l'historique des développeurs du service en question; ceux qui ont un arrière-plan c/c ++ (ou des langages qui adoptent une dénomination similaire, qui inclut de nombreux langages de script, Ruby etc.) choisissent souvent la variante de soulignement; et se reposer de la même manière (Java vs .NET). La bibliothèque Jackson mentionnée, par exemple, assume la convention de dénomination de bean Java (camelCase)

UPDATE: ma définition de "standard" est une convention SINGLE. Donc, même si on peut dire "oui, il y a beaucoup de normes", pour moi, il y 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 une interopérabilité entre plates-formes qui peut avoir un sens ou non.

206
StaxMan

Dans ce document Guide de style Google JSON (recommandations pour la création d’API JSON chez Google),

Il recommande que:

  1. Les noms de propriété doivent être camelCased , ASCII chaînes.

  2. Le premier caractère doit être une lettre, un trait de soulignement (_) ou un signe dollar ($).

Exemple:

{
  "thisPropertyIsAnIdentifier": "identifier value"
}

Notre équipe utilise cette convention.

344
Tho

Prémisse

Il y a pas de nom standard des clés dans JSON.

Facteurs de conduite

Imposer une convention de nommage JSON est très déroutant. Cependant, cela peut facilement être compris si vous le divisez en composants.

  1. Langage de programmation pour générer du JSON

    • Python - snake_case
    • PHP - snake_case
    • Java - camelCase
    • JavaScript - camelCase
  2. JSON lui-même n'a pas de nom standard pour les clés

  3. Langage de programmation pour l'analyse JSON

    • Python - snake_case
    • PHP - snake_case
    • Java - camelCase
    • JavaScript - camelCase

Mix-match les composants

  1. Python "JSON" Python - snake_case - unanime
  2. Python "JSON" PHP - snake_case - unanime
  3. Python "JSON" Java - snake_case - veuillez vous reporter au problème de Java ci-dessous
  4. Python "JSON" JavaScript - snake_case aura un sens; vis de toute façon le front-end
  5. Python "JSON" vous ne savez pas - snake_case aura un sens; vis de toute façon l'analyseur
  6. PHP "JSON" Python - snake_case - unanime
  7. PHP "JSON" PHP - snake_case - unanime
  8. PHP "JSON" Java - snake_case - veuillez vous reporter au problème de Java ci-dessous
  9. PHP "JSON" JavaScript - snake_case aura un sens; vis de toute façon le front-end
  10. PHP "JSON" PHP - snake_case
  11. PHP "JSON" vous ne savez pas - snake_case aura un sens; vis de toute façon l'analyseur
  12. Java "JSON" Python - snake_case - veuillez vous reporter au problème de Java ci-dessous
  13. Java "JSON" PHP - snake_case - veuillez vous reporter au problème de Java ci-dessous
  14. Java "JSON" Java - camelCase
  15. Java "JSON" JavaScript - camelCase
  16. Java "JSON" vous ne savez pas - camelCase aura un sens; vis de toute façon l'analyseur
  17. JavaScript "JSON" Python - snake_case aura un sens; vis de toute façon le front-end
  18. JavaScript "JSON" PHP - snake_case aura un sens; vis de toute façon le front-end
  19. JavaScript "JSON" Java - camelCase - unanime
  20. JavaScript "JSON" JavaScript - camelCase - unanime

Problème de Java

snake_case aura toujours du sens pour ceux qui ont des entrées Java car les bibliothèques JSON existantes pour Java n'utilisent que des méthodes pour accéder aux clés au lieu d'utiliser le standard. dot.syntax . Cela signifie que cela ne ferait pas beaucoup de mal à Java d’accéder aux touches de snake_cased par rapport à l’autre langage de programmation qui peut faire le dot.syntax .

Exemple pour le package Java org.json

JsonObject.getString("snake_cased_key")

Exemple pour le package Java com.google.gson

JsonElement.getAsString("snake_cased_key")

Quelques implémentations réelles

Conclusions

Le choix de la convention de dénomination JSON appropriée pour votre implémentation JSON dépend de votre pile technologique. Dans certains cas, on peut utiliser snake_case , camelCase ou toute autre convention de dénomination.

Une autre chose à considérer est le poids à accorder au générateur JSON par rapport à l'analyseur JSON et/ou au 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 applicative réside généralement du côté du générateur JSON.

De même, si le côté analyseur JSON est inconnu, vous pouvez déclarer ce qui peut jamais fonctionner pour vous.

145
Abel Callejo

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 un soulignement, je les utilise également dans les clés de structure.

Ceci est dû au fait que les champs de base de données comportent de nombreux acronymes/abréviations, de sorte que quelque chose comme appSNSInterfaceRRTest semble un peu brouillon, 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, vous verrez donc quelque chose comme:

var devTask = {
        task_id: 120,
        store_id: 2118,
        task_name: 'generalLedger'
    };

ou

generalLedgerTask = new GeneralLedgerTask( devTask );

Et bien sûr, les clés/chaînes JSON sont entourées de guillemets, mais vous devez ensuite utiliser le fichier JSON.stringify et transmettre des objets JS. Vous n'avez donc pas à vous soucier de cela.

J'ai eu du mal avec cela un peu jusqu'à ce que je trouve ce juste milieu entre les conventions de nommage JSON et JS.

16
Clarence Liu

Il semble y avoir suffisamment de variations pour que les utilisateurs fassent de leur mieux pour autoriser la conversion de toutes les conventions en autres: http://www.cowtowncoder.com/blog/archives/cat_json.html

Notamment, l’analyseur Jackson JSON mentionné préfère bean_naming.

9
entropo

Je pense qu'il n'y a pas de convention officielle de nommage pour JSON, mais vous pouvez suivre certains leaders du secteur pour voir comment cela fonctionne.

Google, qui est l'une des plus grandes entreprises informatiques au 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

0
Filipe Brito

Comme d’autres l’ont dit, il n’existe pas de norme et vous devriez donc en choisir une vous-même. Voici quelques points à considérer lorsque vous le faites:

  1. Si vous utilisez JavaScript pour utiliser JSON, l'utilisation de la même convention de dénomination pour les propriétés des deux propriétés assurera la cohérence visuelle et, éventuellement, des possibilités de réutilisation du code plus propre.

  2. Une petite raison d'éviter l'affaire kebab est que les traits d'union peuvent être en conflit visuel avec les caractères - qui apparaissent dans les valeurs.

    {
      "bank-balance": -10
    }
    
0