Quel format JSON est un meilleur choix pour les paires de valeurs clés et pourquoi?
[{"key1": "value1"}, {"key2": "value2"}]
Ou:
[{"Name": "key1", "Value": "value1"}, {"Name": "key2", "Value": "value2"}]
Ou:
{"key1": "value1", "key2": "value2"}
La première variante semble plus compacte et plus «sémantiquement significative». La deuxième variante semble plus uniformément structurée, ce qui pourrait aider à la traiter. La 3e variante semble encore plus sémantique.
Les paires de valeurs clés seront utilisées pour attacher des données arbitraires à un autre élément. Les données doivent être sérialisées en JSON pour les arrondir à travers un système.
{"key1": "value1", "key2": "value2"}
?Réponses:
Que vous choisissiez la première ou la troisième option dépend de votre cas d'utilisation. Si vous modélisez de nombreuses instances différentes du même type de chose, choisissez la première. Par exemple, vous avez une liste de personnes. Si vous modélisez de nombreux attributs différents d'une chose, choisissez la troisième. Vous pouvez avoir des touches répétées dans le premier format, mais pas dans le troisième.
La deuxième option est terrible, et je n'ai pas encore trouvé de cas d'utilisation approprié. La raison pour laquelle c'est terrible, en plus d'être plus verbeux, est que pour le JSON à un niveau, il rompt la conversion automatique de la plupart des bibliothèques en dictionnaire / carte. Pour JSON profondément imbriqué, il casse l' interface de requête de type XPath .
Cela rend difficile de travailler avec. Et si vous ne connaissez pas vos clés au moment de la compilation, vous voudrez un dictionnaire ou une interface XPath, car vous ne pourrez pas le convertir en classe. Cela peut ne pas sembler être un gros problème maintenant, mais plus vous avez de format de données, plus il sera difficile de changer.
la source
[{"key1": "value1", "key2": "value2"}]
. Le deuxième format ici met la vraie clé sur le côté droit et utilise une autre clé appelée "Nom" pour vous pointer vers la vraie clé, ce qui rend extrêmement difficile l'analyse avec des outils standard.Le 3ème format est en général le meilleur. Cependant, voici un exemple de quelque chose qui convient au 1er format:
Ici, chaque objet fait référence à une chose distincte (et chaque objet utilise les mêmes clés que les autres, donc ils ne peuvent pas être fusionnés). Cependant, chaque objet de la liste est stocké en tant que
{ "username": "foo", "id": 1 }
plutôt que[{ "username": "foo" }, { "id": 1 }]
parce que 1) il est plus court et 2) il fait référence à une chose avec un nom d'utilisateur et un identifiant, pas une chose avec un nom d'utilisateur et une autre chose avec un identifiant.Le problème avec la deuxième option est qu'elle devient très verbeuse à la fois en JSON et avec laquelle travailler. Cependant, il peut être utilisé si vous devez stocker des méta-informations sur la propriété. Un exemple:
Ici se
mutable
réfère à un cas hypothétique de savoir si vous pouvez modifier la propriété elle-même, pas l'objet parent. De telles méta-informations sont similaires à celles de JavaScriptObject.defineProperty
, qui stockent des informations "configurables", "énumérables" et "inscriptibles" sur une propriété.la source
Vous dites que ce sont des paires clé / valeur. Dans ce cas, utilisez # 3: dictionnaire de paires clé / valeur.
S'il ne s'agit pas de paires clé / valeur, ne les appelez pas "clés" et "valeurs" et utilisez # 2, un tableau de dictionnaires au contenu arbitraire.
La structure n ° 1 est juste idiote, sauf si vous avez besoin de paires clé / valeur mais également de leur ordre. Ce que vous faites rarement.
la source
Mettez-vous à la place de la personne qui reçoit le json. Si je ne connais pas le nom de la clé, comment dois-je le récupérer avec le premier ou le dernier format? Vous pouvez parcourir le json bien sûr, mais comme les trois formats atteignent le même résultat, ce n'est qu'une question de syntaxe. Je pense que c'est la seule question pertinente: si vous connaissez les noms des clés, la première ou la dernière option est plus compacte, sinon le deuxième choix est plus compréhensible.
la source