¿Existe un estándar para nombrar JSON? Veo la mayoría de los ejemplos que usan todas las minúsculas separadas por un guión bajo (minúscula). Pero, ¿puedes usar PascalCase o camelCase?
¿Existe un estándar para nombrar JSON? Veo la mayoría de los ejemplos que usan todas las minúsculas separadas por un guión bajo (minúscula). Pero, ¿puedes usar PascalCase o camelCase?
Respuestas:
No hay un solo estándar, pero he visto 3 estilos que menciona ("Pascal / Microsoft", "Java" ( camelCase
) y "C" (guiones bajos, snake_case
)), así como al menos uno más, kebab-case
como longer-name
).
En su mayoría, parece depender de los desarrolladores de fondo del servicio en cuestión; aquellos con antecedentes de c / c ++ (o lenguajes que adoptan nombres similares, que incluyen muchos lenguajes de script, ruby, etc.) a menudo eligen la variante de subrayado; y descansar de manera similar (Java vs .NET). La biblioteca de Jackson que se mencionó, por ejemplo, asume la convención de nomenclatura del bean Java ( camelCase
)
ACTUALIZACIÓN: mi definición de "estándar" es una CONVENCIÓN ÚNICA. Entonces, aunque uno podría decir "sí, hay muchos estándares", para mí hay múltiples Naming Conventions
, ninguno de los cuales es "El" estándar en general. Uno de ellos podría considerarse el estándar para una plataforma específica, pero dado que JSON se usa para la interoperabilidad entre plataformas que pueden o no tener mucho sentido.
En este documento, Guía de estilo JSON de Google (recomendaciones para crear API JSON en Google),
Recomienda que:
Los nombres de las propiedades deben ser camelCased , cadenas ASCII.
El primer carácter debe ser una letra, un guión bajo (_) o un signo de dólar ($).
Ejemplo:
{
"thisPropertyIsAnIdentifier": "identifier value"
}
Mi equipo sigue esta convención.
Property Name Guidelines->Property Name Format->Choose meaningful property names.
.
No hay nombres estándar de claves en JSON . De acuerdo con la sección Objetos de la especificación:
La sintaxis JSON no impone restricciones a las cadenas utilizadas como nombres, ...
Lo que significa que camelCase o snake_case deberían funcionar bien.
Imponer una convención de nomenclatura JSON es muy confuso. Sin embargo, esto se puede resolver fácilmente si lo divide en componentes.
Lenguaje de programación para generar JSON
JSON en sí no tiene un nombre estándar de claves
Lenguaje de programación para analizar JSON
snake_case todavía tendrá sentido para aquellos con entradas de Java porque las bibliotecas JSON existentes para Java solo usan métodos para acceder a las claves en lugar de usar la sintaxis estándar dot.syntax . Esto significa que no le haría mucho daño a Java acceder a las teclas snake_cased en comparación con el otro lenguaje de programación que puede hacer la sintaxis dot.syntax .
Ejemplo para el paquete de Javaorg.json
JsonObject.getString("snake_cased_key")
Ejemplo para el paquete de Javacom.google.gson
JsonElement.getAsString("snake_cased_key")
Elegir la convención de nomenclatura JSON adecuada para su implementación JSON depende de su pila de tecnología. Hay casos en los que se puede usar snake_case , camelCase o cualquier otra convención de nomenclatura.
Otra cosa a tener en cuenta es el peso que se debe poner en el generador JSON frente al analizador JSON y / o el JavaScript front-end. En general, se debe poner más peso en el lado del generador JSON en lugar del lado del analizador JSON. Esto se debe a que la lógica empresarial generalmente reside en el lado del generador JSON.
Además, si se desconoce el lado del analizador JSON, puede declarar lo que pueda funcionar para usted.
"Person":
no es camelCase :)
Notablemente para mí en NodeJS, si estoy trabajando con bases de datos y mis nombres de campo están separados por subrayado, también los uso en las claves de estructura.
Esto se debe a que los campos db tienen muchos acrónimos / abreviaturas, así que algo como appSNSInterfaceRRTest parece un poco desordenado, pero app_sns_interface_rr_test es más agradable.
En Javascript las variables son todas camelCase y los nombres de clase (constructores) son ProperCase, por lo que vería algo como
var devTask = {
task_id: 120,
store_id: 2118,
task_name: 'generalLedger'
};
o
generalLedgerTask = new GeneralLedgerTask( devTask );
Y, por supuesto, en JSON las claves / cadenas están entre comillas dobles, pero luego solo usa JSON.stringify y pasa objetos JS, por lo que no debe preocuparse por eso.
Luché un poco con esto hasta que encontré este medio feliz entre las convenciones de nombres JSON y JS.
org.json
, gson
. Recibir datos de snake_case no hace tanto daño ...JSONObject.get('snake_case_key_here')
Parece que hay suficiente variación para que las personas hagan todo lo posible para permitir la conversión de todas las convenciones a otras: http://www.cowtowncoder.com/blog/archives/cat_json.html
En particular, el analizador Jackson JSON mencionado prefiere bean_naming
.
beanNaming
.
Creo que no hay una convención de nomenclatura oficial para JSON, pero puede seguir a algunos líderes de la industria para ver cómo funciona.
Google, que es una de las compañías de TI más grandes del mundo, tiene una guía de estilo JSON: https://google.github.io/styleguide/jsoncstyleguide.xml
Aprovechando, puede encontrar otra guía de estilos, que Google define, aquí: https://github.com/google/styleguide
Como otros han dicho, no hay un estándar, por lo que debe elegir uno usted mismo. Aquí hay un par de cosas a tener en cuenta al hacerlo:
Si está utilizando JavaScript para consumir JSON, usar la misma convención de nomenclatura para las propiedades en ambos proporcionará consistencia visual y posiblemente algunas oportunidades para la reutilización de código más limpio.
Una pequeña razón para evitar el caso kebab es que los guiones pueden chocar visualmente con los -
caracteres que aparecen en los valores.
{
"bank-balance": -10
}