La détermination de l'égalité de format JSON objets dans node.js
Quel est le moyen le plus efficace pour comparer les deux au format JSON objets de données dans node.js?
Ces objets ne contiennent pas de "undefined" ou de fonctions et de leur propotype est Object
.
J'ai entendu qu'il y a un bon soutien si JSON node.js
Qu'est-ce que "un JSON?" Ce genre de comparaison?
JSON est un objet qui se compose de chaînes de caractères, des nombres, des booléens, des dates, des tableaux et d'autres jsons. le tableau peut également contenir JSONSs
Je veux dire "canonocal" json
De mal; c'est un . JSON est un format de.
Je suggère
JSON est un objet qui se compose de chaînes de caractères, des nombres, des booléens, des dates, des tableaux et d'autres jsons. le tableau peut également contenir JSONSs
Je veux dire "canonocal" json
De mal; c'est un . JSON est un format de.
Je suggère
JSON.stringify(x) === JSON.stringify(y)
OriginalL'auteur Dan | 2012-03-23
Vous devez vous connecter pour publier un commentaire.
Amis! Je suis vraiment désolé si je ne comprends pas quelque chose, ou d'expliquer la question dans le mauvais termes. Tout ce que je veux faire est de comparer l'égalité de deux morceaux de JSON standardisés de données comme ceci:
{"skip":0, "limit":7, "arr": [1682, 439, {"x":2, arr:[]}] }
{"skip":0, "limit":7, "arr": [1682, 450, "a", ["something"] }
Je suis sûr à 100% il n'y aura pas de fonctions,
Date
,null
ouundefined
, etc. dans ces données. Je tiens à dire que je ne veux pas comparer des objets JavaScript dans le cas le plus général (avec le complexe des prototypes, des circulaires, des liens et tout ce genre de choses). Le prototype de ces données seraObject
. Je suis aussi sûr que beaucoup d'habiles programmeurs ont répondu à cette question avant moi.La principale chose qui me manque, c'est que je ne sais pas comment l'expliquer à ma question correctement. N'hésitez pas à éditer mon post.
Ma réponse:
Première façon: Unefficient mais fiable. Vous pouvez modifier une méthode générique comme ceci afin de ne pas perdre de temps à chercher pour les fonctions et les
undefined
. Veuillez noter que le générique de la méthode d'itération de la des objets à trois reprises (il y a troisfor .. in
des boucles à l'intérieur)Deuxième façon: Efficace, mais a une restriction. J'ai trouvé
JSON.stringify
est extrêmement rapide dans node.js. La solution la plus rapide qui fonctionne est:JSON.stringify(data1) == JSON.stringify(data2)
Remarque très importante! Pour autant que je sache, ni JavaScript, ni JSON n'a pas d'importance l'ordre des champs d'objet. Toutefois, si vous comparez des chaînes faite d'objets, ce qui importe beaucoup. Dans mon programme, les champs d'objet sont toujours créés dans le même ordre, de sorte que le code ci-dessus fonctionne. Je n'ai pas de recherche dans le V8 de la documentation, mais je pense que nous pouvons compter sur la création de champs de commande. Dans d'autres cas, être conscient de l'utilisation de cette méthode.
Dans mon cas concret le deuxième moyen est 10 fois plus efficaces que la première.
Vous avez tout à fait raison, je dois modifier ma réponse selon que
OriginalL'auteur Dan
J'ai fait une analyse comparative des différentes techniques, avec un trait de soulignement sortir sur le dessus:
Voici le code source:
{a:1,b:1}
et{b:1,a:1}
objets json, d'autres méthodes seront de retour (toujours) vrai (l'égalité).OriginalL'auteur Rene Wooller
Sur le visage de celui-ci, je crois que c'est ce que vous cherchez:
Objet de Comparaison dans le JavaScript
Cependant, le plus complet de la réponse se trouve ici:
Comment voulez-vous déterminer l'égalité pour les deux objets JavaScript?
Ces réponses sont de 2 et 3 ans, respectivement. C'est toujours une bonne idée de chercher sur le site pour votre question avant de poster, ou de recherche de Google, plus largement, -- "javascript comparer deux objets JSON" dans Google renvoie beaucoup. Les 4 meilleurs hits sont tous StackOverflow réponses, pour le moment.
OriginalL'auteur DreadPirateShawn
Vous pouvez utiliser renommer/annuler/set de diff pour les objets JSON - https://github.com/mirek/node-rus-diff
Votre exemple objets JSON:
...générer la suite de diff:
...qui est MongoDB compatible diff format.
Si les documents sont les mêmes,
rusDiff(a, b)
retournefalse
.OriginalL'auteur Mirek Rusin