¿Qué formato JSON es una mejor opción para pares de valores clave y por qué?
[{"key1": "value1"}, {"key2": "value2"}]
O:
[{"Name": "key1", "Value": "value1"}, {"Name": "key2", "Value": "value2"}]
O:
{"key1": "value1", "key2": "value2"}
La primera variante parece más compacta y más "semánticamente significativa". La segunda variante parece más uniformemente estructurada, lo que podría ayudar a procesarla. La tercera variante parece aún más semántica.
Los pares de valores clave se utilizarán para adjuntar datos arbitrarios a algún otro elemento. Los datos deben ser serializados como JSON para darles la vuelta a través de un sistema.
{"key1": "value1", "key2": "value2"}
?Respuestas:
Si elige la primera o la tercera opción depende de su caso de uso. Si está modelando muchas instancias diferentes del mismo tipo de cosas, elija la primera. Por ejemplo, tienes una lista de personas. Si está modelando muchos atributos diferentes de una cosa, elija la tercera. Puede tener claves repetidas en el primer formato, pero no en el tercero.
La segunda opción es terrible, y aún no he encontrado un caso de uso adecuado para ello. La razón por la que es terrible, además de ser más detallado, es que para JSON de un solo nivel, rompe la conversión automática de la mayoría de las bibliotecas a un diccionario / mapa. Para JSON profundamente anidado, rompe la interfaz de consulta tipo XPath .
Esto dificulta trabajar con él. Y si no conoce sus claves en el momento de la compilación, querrá un diccionario o una interfaz XPath, porque no podrá convertirlo en una clase. Puede que ahora no parezca un gran problema, pero cuanto más tiempo tenga un formato de datos, más difícil será cambiarlo.
fuente
[{"key1": "value1", "key2": "value2"}]
. El segundo formato aquí es colocar la clave real en el lado derecho y usar otra clave llamada "Nombre" para señalar la clave real, lo que hace que sea extremadamente difícil de analizar con herramientas estándar.El 3er formato es en general el mejor. Sin embargo, aquí hay un ejemplo de algo adecuado para el primer formato:
Aquí cada objeto se refiere a una cosa separada (y cada objeto usa las mismas teclas que los demás, por lo que no se pueden fusionar). Sin embargo, cada objeto en la lista se almacena en
{ "username": "foo", "id": 1 }
lugar de[{ "username": "foo" }, { "id": 1 }]
porque 1) es más corto y 2) se refiere a una cosa con un nombre de usuario y una identificación, no una cosa con un nombre de usuario y otra cosa con una identificación.El problema con la segunda opción es que se vuelve muy detallado tanto como JSON como para trabajar con él. Sin embargo, podría usarse si necesita almacenar metainformación sobre la propiedad. Un ejemplo:
Aquí se
mutable
refiere a un caso hipotético de si puede modificar la propiedad en sí, no el objeto primario. La metainformación como esta es similar a la de JavaScriptObject.defineProperty
, que almacena información "configurable", "enumerable" y "grabable" sobre una propiedad.fuente
Dices que estos son pares clave / valor. En ese caso, use # 3: diccionario de pares clave / valor.
Si no se trata de pares clave / valor, no los llame "claves" y "valores" y use el # 2, una matriz de diccionarios con contenido arbitrario.
La Estructura n. ° 1 es una tontería a menos que necesite pares clave / valor, pero también su orden. Lo cual rara vez haces.
fuente
Ponte en el lugar de la persona que recibe el json. Si no sé el nombre de la clave, ¿cómo se supone que debo recuperarlo con el primer o el último formato? Puede recorrer el json, por supuesto, pero dado que los tres formatos logran el mismo resultado, es solo una cuestión de sintaxis. Creo que esta es la única pregunta significativa: si conoce los nombres clave, la primera o la última opción son más compactas, si no, la segunda opción es más comprensible.
fuente