OK, I turned to reading the docs :) http://www.prototypejs.org/learn/json Although, they refer to a very old version of Crockford's json lib which no longer extends Object.prototype the conclusion probably holds true.
Anyway, is there a way to have json2.js and prototype play nice with each other? On Wed, Nov 19, 2008 at 9:40 PM, Malte Ubl <[EMAIL PROTECTED]> wrote: > Hey, > > is Prototype designed to use a built in JSON stringification mechanism? > > The most popular library, json2.js (http://json.org/json2.js), states > pretty clearly that the toJSON method is not supposed to return a > serialized result (which it would turn into a string) but should > rather return something that can be automatically stringified by the > library itself. That might be any kind of value, but besides that it > can be also be instances of Object. Joose.Storage thus returns an > Object that represents the state of the Joose object and which > includes extra info that can be used for reinstantiation. The nice > side effect of this is, that complex structures of nested objects are > no problem because the stringifier will once again call toJSON on the > children (if toJSON would return a string it would have to implement > this itself). > > If Prototype does indeed need a more complex toJSON method, we could, > of course, detect that and change our behavior. > > Bye > Malte > -- > http://code.google.com/p/joose-js/ > http://blok.appspot.com/ > > On Wed, Nov 19, 2008 at 3:51 PM, kangax <[EMAIL PROTECTED]> wrote: >> >> On Nov 15, 4:48 pm, "Malte Ubl" <[EMAIL PROTECTED]> wrote: >> [...] >>> The source code of the test is located >>> athttp://code.google.com/p/joose-js/source/browse/trunk/tests/12_storag... >>> Interestingly the statement at line 49 succeeds. (It stringifies a >>> Joose object to JSON and and deserializes it again) >>> The statement on line 81, howevery, fails to produce correct JSON. The >>> produced string looks like this: >>> {"test":"[[object Object]]","another":{"a":1} >>> >>> When you set a firebug break point in Storage.js line 11 you can see >>> that the code goes deeply into Prototype.js territory. >> >> The "joose" object (the one that's being tested against) seems to have >> `toJSON` method: >> >> function () { >> return this.pack(Joose.Storage.TEMP_SEEN); >> } >> >> That method seems to return an object, rather than a string >> representation of an object. Prototype's `Object.toJSON` just happens >> to delegate its logic to passed object's `toJSON` (effectively letting >> "joose" object decide "what to do"). "joose" object returned from >> `toJSON` is then turned into "[[object Object]]" via >> `Array.prototype.join` invoked on an array it's contained within (join >> performs `toString` on each of array's items, if I'm not mistaken). >> >>> >>> Bye >>> Malte >> >> [...] >> >> -- >> kangax >> >> >> > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Prototype: Core" group. To post to this group, send email to prototype-core@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/prototype-core?hl=en -~----------~----~----~----~------~----~------~--~---