web-dev-qa-db-fra.com

JSON doit-il inclure des valeurs nulles

Je crée une API qui renvoie les résultats sous forme de code JSON. Existe-t-il actuellement une meilleure pratique pour savoir si nous devrions inclure des clés dans le résultat lorsque la valeur est null? Par exemple:

{
    "title":"Foo Bar",
    "author":"Joe Blow",
    "isbn":null
}

ou

{
    "title":"Foo Bar",
    "author":"Joe Blow"
}

Comme le second est plus petit, je me penche vers ce style, mais je ne suis pas sûr s'il existe un style préféré ou non. Du point de vue du client, il semble que les deux styles soient fonctionnellement équivalents. Des avantages ou des inconvénients pour chacun?

85
jjathman

La seconde économisera un peu sur la bande passante, mais si cela posait problème, vous utiliseriez également des tableaux indexés au lieu de remplir le JSON avec des clés. Clairement, ["Foo Bar","Joe Blow"] est beaucoup plus court que ce que vous avez maintenant.

En termes de convivialité, je ne pense pas que cela fasse une différence. Dans les deux cas, if(json.isbn) passera à la variable else. Il n’est généralement pas nécessaire de faire la distinction entre null (aucune valeur) et undefined (aucune valeur donnée).

30

Je suis fan de toujours inclure explicitement null explicitement car cela porte un sens ... Tout en omettant une propriété laisse de l'ambiguïté.

Tant que votre protocole avec le serveur est convenu, tout ce qui précède peut fonctionner, mais si vous transmettez des valeurs nulles à partir du serveur, je pense que cela rendra vos API plus flexibles ultérieurement.

Mentionnons également que la fonction hasOwnProperty de javascript vous donne des informations supplémentaires.

/* if true object DOES contain the property with *some* value */
if( objectFromJSON.hasOwnProperty( "propertyName" ) )

/* if true object DOES contain the property and it has been set to null */
if( jsonObject.propertyName === null )

/* if true object either DOES NOT contain the property
   OR
   object DOES contain the property and it has been set to undefined */
if( jsonObject.propertyName === undefined )
75
rushkeldon

null signifie en JavaScript quelque chose de très différent de undefined.

Votre sortie JSON doit refléter ce qui est utilisé et requis par votre application dans le contexte spécifique de l’utilisation des données JSON.

20
Brad

Vous devez absolument l'inclure s'il est nécessaire de faire la distinction entre null et undefined car ils ont deux significations différentes en Javascript. Vous pouvez penser que null signifie que la propriété est inconnue ou dénuée de sens, et undefined signifie que la propriété n’existe pas.

D'un autre côté, s'il n'est pas nécessaire que quiconque fasse cette distinction, continuez et laissez tomber.

10
Paulpro

Je pense que cela ne fait aucune différence que vous utilisiez le JSON comme une donnée derrière l'expérience de l'utilisateur.

La différence apparaît dans les fichiers JSON-config, lorsqu'un utilisateur doit éditer quelque chose à la main. Lorsque vous utilisez le premier exemple, vous donnez à l’utilisateur un indice sur la configuration.

0
Alexey Kachalov