Regarding the second items white list (array) argument:
We can use it to create a simple object hashing function (similar to object-hash, but with limitation of maximum object depth 1). The important thing is, JSON.stringify(obj) may not follow property order, which matters when the serialization is input for hashing/checksum. Instead we can pass Object.keys(obj).sort() as the 2nd argument, and the JSON will be stringified in that property order only.
Nice to know. However, being a java developer, this brings me to think that this should be a built-in functionality. Doesn't plain JS have hashing function for all it's objects?
I'd been looking everywhere to find a simple way to get JSON.stringify() to output items in a specific order. You post provided exactly what I needed to do what I wanted.
Unfortunately upon reading the JSON.stringify() docs I can't find any information on using a replacer array to set keys order. Only info about whitelists. Can you point to any docs on this?
Some other info I found that may be if interest to others: "sort object properties and JSON.stringify" - tfzx.net/article/499097.html
Regarding the second items white list (array) argument:
We can use it to create a simple object hashing function (similar to object-hash, but with limitation of maximum object depth 1). The important thing is,
JSON.stringify(obj)
may not follow property order, which matters when the serialization is input for hashing/checksum. Instead we can passObject.keys(obj).sort()
as the 2nd argument, and the JSON will be stringified in that property order only.View code snippet for client-side at GitHub
View code snippet for Node.js at GitHub and tests
Nice to know. However, being a java developer, this brings me to think that this should be a built-in functionality. Doesn't plain JS have hashing function for all it's objects?
No. JS doesn't expose any hashing function for any of its supported types.
This is kind of horrifying and I love it.
Wow, didn't know it. Nice snippet! I always learn something new.
I'd been looking everywhere to find a simple way to get JSON.stringify() to output items in a specific order. You post provided exactly what I needed to do what I wanted.
Unfortunately upon reading the
JSON.stringify()
docs I can't find any information on using a replacer array to set keys order. Only info about whitelists. Can you point to any docs on this?Some other info I found that may be if interest to others: "sort object properties and JSON.stringify" - tfzx.net/article/499097.html
Thanks so much for your post.
From tc39.es/ecma262/#sec-json.stringify :
Type(replacer)
is [Array]:and later tc39.es/ecma262/#sec-serializejson... :
Thanks for that. Pity it is missing from the MDN Doc's. For some reason the links didn't take me to the relevant sections.
Updated links. DEV included trailing
:
in links, so they broke.Thanks, the links now work.
I didn't pick up on the ", but with limitation of maximum object depth 1" issue and I need to handle objects with depth > 1.
After some more searching I found this article which is a collection of code snippets. tfzx.net/article/499097.html
The code that worked for me is:
which is from: stackoverflow.com/a/53593328/91300
Brilliant! thanks