JSON decoding

Erik Arvidsson erik.arvidsson at gmail.com
Fri Oct 20 12:36:17 PDT 2006

If Date is serialized as an ISO strings the process of encoding and
decoding loses information. If Dates are added to JSON then they
should be encoded using new Date(ms). However Dates are not supported
in JSON today and removing them from JS2 seems OK.

On 10/20/06, Brendan Eich <brendan at mozilla.org> wrote:
> On Oct 11, 2006, at 8:06 PM, Brendan Eich wrote:
> > On Oct 11, 2006, at 3:06 PM, Robert Sayre wrote:
> >
> >> I'm pretty sure the group accepted some form of Crockford's parseJSON
> >> proposal, but I think it would be handy to add something analogous to
> >> simplejson's object_hook argument. One weakness JSON has is
> >> annotating
> >> literals (like strings with custom attributes), and this facility can
> >> make that smoother.
> >>
> >> <http://svn.red-bean.com/bob/simplejson/trunk/docs/module-
> >> simplejson.html#load>
> >>
> >> See "Specializing JSON object decoding" above as well.
> >
> > Thanks, the wiki will be re-exported after the next face-to-face
> > TG1 meeting (which is the end of next week).  We should have
> > finalized the JSON APIs by then.  We were already considering an
> > optional filter funarg, but Bob's object_hook is more powerful.
> > I've added a comment to the wiki with that link.
> Sneak preview (wiki re-export coming soon) of Doug Crockford's latest
> rev of the proposal:
> JSON encoding and decoding
> The following built-in functions facilitate handling JSON data, as
> specified in Douglas Crockford's RFC 4627.
> Encoding
>      * Object.prototype.toJSONString( filter , pretty )
> Returns a String containing the JSON representation of an object,
> array, date, string, number, boolean, or null . The proto link is not
> used when finding members. A Date object is serialized as an ISO date
> string in double quotes. An Array object is serialized as a sequence
> of comma separated values wrapped in square brackets. Otherwise, an
> object is serialized as a a sequenced of comma separated pairs
> wrapped in curly braces. A string is serialized as a quoted string
> with backslash escapement. A finite number is serialized by toString.
> true , false , and null are encoded an unquoted strings. See http://
> www.ietf.org/rfc/rfc4627.txt?number=4627
> An encodingError will be thrown if the encoder reache a value which
>      * cannot be encoded as valid JSON (such as a function,
> undefined, and NaN) OR
>      * represents a cycle (as happens when an object has a property
> that refers to itself)
> Recurring objects which do not cause cycles are allowed, but will
> produce a complete text for each occurrence.
> A filter is an optional function which takes two parameters: a name
> and a value. The function will be called for each candidate pair in
> each object being serialized. If the function returns true, then the
> pair will be included. If the function returns false, then the pair
> will be excluded. If the function returns any other value, or if it
> throws, then an encodingError exception is thrown.
> If the pretty parameter is true, then linefeeds are inserted after
> each { , [ , and , and before } and ] , and multiples of 4 spaces are
> inserted to indicate the level of nesting, and one space will be
> inserted after : . Otherwise, no whitespace is inserted between the
> tokens.
> Decoding
>      * String.prototype.parseJSON( hook )
> Returns the value represented by the string. A syntaxError is thrown
> if the string was not a strict JSON text.
> The optional hook function will be called for each object value
> found. It is passed each object. Its return value will be used
> instead of the object in the final structure.
> -----
> I like this proposal a lot; it avoids too many bells and whistles,
> and captures the desired (different) hooks for encoding and decoding,
> as well as pretty-encoding.  Comments?
> /be
> _______________________________________________
> Es4-discuss mailing list
> Es4-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es4-discuss


More information about the Es4-discuss mailing list