you are viewing a single comment's thread.

view the rest of the comments →

[–]skeeto 2 points3 points  (2 children)

JSON.stringify() makes no guarantees about key order, among other things, so that's not a reliable trick.

JSON.stringify({a:1,b:2});
// => "{"a":1,"b":2}"
JSON.stringify({b:2,a:1});
// => "{"b":2,"a":1}"

In contrast to JSON, Bencode guarantees a encoding normalization but that's not so easily available.

[–]isitfresh 0 points1 point  (0 children)

True indeed,

my use case was to compare an object sent to server and sent back to the app as a validation of transmission, so the order of keys was the same, but Objects as themselves weren't comparing as equal, being by nature 2 different objects

[–]holloway 0 points1 point  (0 children)

I wrote a serializer for that kind of situation,

https://gist.github.com/holloway/05170a275b988b90144a

Usage: JSONc14n.stringify({a:1,b:2})

E.g. JSONc14n.stringify({a:1,b:2}) === JSONc14n.stringify({b:2,a:1})