¿Es una mala práctica usar guiones en las claves JSON?

12

Veo muchas preguntas que giran en torno al acceso a las teclas JSON que usan guiones (kebab-case), pero ahora me pregunto si debería seguir con camelCase o snake_case en mis teclas. Sé que los guiones también pueden crear asignaciones complicadas cuando se transfieren entre idiomas. He visto algunas bibliotecas JSON deserializar convertir esas claves a un estilo camelCase.

Ejemplo:

var something = {
  "some-value": 'thing'
}

Vs

var something = {
  "someValue": 'thing',
  "some_other_value": 'thing_two'
}
Matt Oaxaca
fuente
44
REST no tiene nada que decir sobre los formatos de carga útil.
Eric Stein
2
¿Por qué usas kebab-case en JSON? Las personas generalmente usan camelCase para JSON porque siempre es una buena práctica seguir las convenciones de nomenclatura del entorno de programación y es una práctica estándar usar camelCase para variables en JavaScript. Aunque supongo que está utilizando JSON para comunicarse con JavaScript.
Alternatex
1
Veo que la pregunta está etiquetada con javascript, pero la pregunta en sí misma parece ser sobre una API entre diferentes idiomas / bibliotecas. Si le preocupa JavaScript, tenga en cuenta que la notación de puntos no funciona con guiones.
Izkata
55
Realmente no es una mala práctica, ya que JSON es independiente del lenguaje y, por lo tanto, no debería estar limitado por la sintaxis de ningún idioma en particular. Dicho esto, tiene sentido usar solo caracteres alfanuméricos, ya que esto puede mapearse directamente con identificadores en todos los idiomas principales, por lo que esto solo conducirá a la menor cantidad de problemas de mapeo.
JacquesB
1
@Alternatex: +1 para "kebab-case" :-)
gnasher729

Respuestas:

13

Puede usar cualquier cosa como claves JSON, siempre que sea UTF-8 válido, no contenga cero puntos de código, y sería útil si pudiera representar la clave como una cadena en el lenguaje de programación de su elección. Podría recomendar no utilizar diferentes representaciones Unicode de la misma cadena (por ejemplo, "Ä" escrito como uno o dos puntos de código).

Lectura de algunos comentarios: Parece que algunas personas intentan crear clases con variables de instancia que coincidan con las claves en los diccionarios JSON. Lo cual, por supuesto, no funciona si su clave es "algún valor" a menos que escriba COBOL. Creo que esto está equivocado. Tengo clases modelo que están diseñadas de la manera que las quiero. JSON solo se usa para llenar las clases de modelo. Tomaré lo que los servidores decidieron usar para las claves y lo pondré en mis objetos modelo.

gnasher729
fuente
1
urg, usted plantea la pregunta de cómo su programa consumidor accede a las teclas json. Comúnmente esto se hace analizando el json como un objeto. El uso de exageraciones u otros caracteres que eviten esto simplemente dificulta la vida de sus consumidores
Ewan
Y esto es válido: {"❓": "✅"}
Vinicius Brasil
1
¿Cómo evitan algo los guiones? Obtengo un diccionario y puedo usar "alguna tecla" como tecla, incluso puedo usar "❓" como tecla.
gnasher729
9

Hay muchos sistemas de serialización JSON que son más que capaces de manejar la asignación entre nombres de campo que no son adecuados para usar en el idioma con el que se integran. En la mayoría de los casos, no son difíciles de usar y requieren solo un poco de esfuerzo adicional. En un mundo ideal, no tendría que hacerlo, pero si su API ya usa guiones, cambiarlo sería una cura peor que la enfermedad. También tenga en cuenta que el uso de guiones es el estilo más común en ciertos idiomas, especialmente aquellos basados ​​en LISP, por lo que probablemente haya una minoría silenciosa de los consumidores de su API que estén felices de ver guiones en lugar de otro formato.

Jules
fuente
Voy a votar esto lo antes posible. Encontré una idea, gracias.
Matt Oaxaca
1

Después de pasar un tiempo en la industria y trabajar en algunos sistemas. No creo que haya una mejor práctica o una carcasa adecuada para las claves JSON. El aspecto más importante de cualquier formato (carcasa / estilo de código / etc.) es la coherencia y la adopción del equipo.

Si la base del código es fragmentada e inconsistente, reúnase como un equipo y acuerde un estilo consistente y luego controle el formateo colectivamente.

Matt Oaxaca
fuente