Estoy creando una API que devuelve resultados como JSON. ¿Existe una práctica recomendada actual sobre si debemos incluir claves en el resultado cuando el valor es nulo? Por ejemplo:
{
"title":"Foo Bar",
"author":"Joe Blow",
"isbn":null
}
o
{
"title":"Foo Bar",
"author":"Joe Blow"
}
Como el segundo es más pequeño, me inclino por este estilo, pero no estoy seguro de si hay un estilo preferido o no. Desde la perspectiva del cliente, parece que ambos estilos serían funcionalmente equivalentes. ¿Pros o contras de cada uno?
javascript
json
null
undefined
jjathman
fuente
fuente
Respuestas:
El segundo ahorrará una pequeña cantidad de ancho de banda, pero si eso fuera un problema, también usaría matrices indexadas en lugar de llenar el JSON con claves. Claramente,
["Foo Bar","Joe Blow"]
es mucho más corto de lo que tienes ahora.En términos de usabilidad, no creo que haya ninguna diferencia. En ambos casos,
if(json.isbn)
saltará alelse
. Por lo general, no es necesario distinguir entrenull
(sin valor) yundefined
(sin valor dado).fuente
!= null
(no estrictamente previsto)if( typeof onbeforepaste == "undefined")
para ver sionBeforePaste
es compatible. Incluso entonces, no hay una diferencia real, ya que puede asignar eventos todo lo que desee (simplemente no harán nada si no son compatibles).Soy fanático de incluir siempre null explícitamente, ya que eso conlleva un significado. Si bien la omisión de una propiedad deja ambigüedad.
Siempre que se acuerde su protocolo con el servidor, cualquiera de los anteriores puede funcionar, pero si pasa nulos desde el servidor, creo que eso hace que sus API sean más flexibles más adelante.
También debería mencionar que la función hasOwnProperty de javascript le da más información.
/* 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 )
fuente
"propertyName" in objectFromJSON
lugar deobjectFromJSON.hasOwnProperty("propertyName")
. Además, si insiste en usarhasOwnProperty
, escribaObject.prototype.hasOwnProperty.call(objectFromJSON, "propertyName")
por seguridad.En JavaScript,
null
significa algo muy diferente aundefined
.Su salida JSON debe reflejar lo que su aplicación usa y necesita en el contexto específico del uso de datos JSON.
fuente
{"prop":undefined}
es diferente de{}
.Definitivamente debe incluirlo si hay alguna necesidad de distinguir entre ellos
null
yundefined
ya que tienen dos significados diferentes en Javascript. Puede pensarnull
que significa que la propiedad es desconocida o sin sentido, yundefined
que significa que la propiedad no existe.Por otro lado, si no hay necesidad de que nadie haga esa distinción, entonces déjela fuera.
fuente
Creo que no hay diferencia cuando usa JSON como un dato detrás de la experiencia del usuario.
La diferencia aparece en los archivos JSON-config, cuando un usuario debe editar algo a mano. Cuando usa el primer ejemplo, le da al usuario una pista sobre la configuración.
fuente