4 ms·
I see a pretty major problem with this. It seems to depend on the order of key value pairs in object literals being defined. The order is not defined by the JSO
by ZenPsycho 14y ago
I see a pretty major problem with this. It seems to depend on the order of key value pairs in object literals being defined. The order is not defined by the JSON or the ecmascript standards. So you can't really depend on the order of keys in a json object, unless you explicitly define some order (like alphabetical, for instance). I like the basic concept of compressing json to json but this is not a particularly good way to do it- since the order of those keys may not be preserved in round trips through json encoders and decoders in various languages.
- deleted 14y ago[deleted]
- ZenPsycho 14y agothat is only enough to make it seem like it works okay. But as I said, there's nothing in the JSON spec that obligates any intervening party to preserve the order of the keys in the object.
- dogada 14y agoIt doesn't matter. Even if order of keys will be changed somewhere in the middle during JSON.strigify, as schema id will be always used keys sorted alphabetically and object values are always stored in the same order as keys sorted: https://github.com/dogada/RJSON/blob/master/rjson.js#L213 https://github.com/dogada/RJSON/blob/master/rjson.js#L213
- whalesalad 14y agoI saw the same thing right away. Seems like the first item in the array would have to be used as a hash of key/index pairs to be used for the following items. I guess this would only be useful with large sets of data, the examples makes them look kind of silly =) So this: "users": [ {"first": "Homer", "last": "Simpson"}, {"first": "Hank", "last": "Hill"}, {"first": "Peter", "last": "Griffin"} ], Becomes: "users": [ ["first", "last"], ["Homer", "Simpson"], ["Hank", "Hill"], ["Peter", "Griffin"] ],
- ZenPsycho 14y agoif you can infer a schema, I'd almost prefer a column oriented arrangement. "users": { "first":["Homer","Hank","Peter"], "last":["Simpson","Hill","Griffin"] }, then the information about the original structure can be restored by a set of object paths which need to be "rotated" from column to row orientation. ["users"] saving a few characters in the process. though I see that the advantage of this system is supposedly that it can handle any sort of shape of data, not just ones with a fixed schema. I've been trying to figure out how trang [http://www.thaiopensource.com/relaxng/trang.html http://www.thaiopensource.com/relaxng/trang.html] does its schema inference trick. (it turns a set of xml files into a relaxNG schema). If you have a schema for a JSON file, it's knowledge you can apply to algorithmically creating really efficient transformations.
- dogada 14y agoExactly, ZenPsycho, the purpose of RJSON is to convert data with dynamic schema. Fields with default values are omitted often, for example if most of data have 'private' property set to False, it have sense to output it only for 1% of objects with 'private' set to True. This issue is addressed in RJSON.
- danieldk 14y agoDoesn't this introduce ambiguity? How do you represent list of 'tuple lists'?
- ZenPsycho 14y agoyou could steal the method rjson uses and do this "users": [ [3, "first", "last"], [3, "Homer", "Simpson"], [3, "Hank", "Hill"], [3, "Peter", "Griffin"] ],
- dogada 14y agoYou can see it in the unit tests: https://github.com/dogada/RJSON/blob/master/test/tests.js#L43 https://github.com/dogada/RJSON/blob/master/test/tests.js#L4...
- dogada 14y agoThanks ZenPsycho, I added sorting of object schema keys to fix this issue: https://github.com/dogada/RJSON/commit/a27c8927cd0c2d7d151e22bc28c56ba061dbbae9 https://github.com/dogada/RJSON/commit/a27c8927cd0c2d7d151e2...