<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div>On Jun 5, 2009, at 1:46 PM, Matthew Miller wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0; "><div class="hmmessage" style="font-size: 10pt; font-family: Verdana; ">This observation may have been made before and I missed it, but allowing unquoted names can cause the following confusion:<br>&nbsp;<br>var memberName = "foo";<br>var anObject = { memberName: "test" };<br>&nbsp;<br>Now what should anObject.foo evaluate to? Will it be obvious to most coders?</div></span></blockquote><div><br></div>Not to programmers used to Python, or otherwise not familiar with the implicit quoting of identifiers as property names in JS object initialisers, you're right.</div><div><br></div><div>The difference with Python here was intentional; whether it was a good idea, I'm not so sure. But ES3 is clear, and JSON (being shorter and simpler) is even more clear.</div><div><br></div><div><br><blockquote type="cite"><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0; "><div class="hmmessage" style="font-size: 10pt; font-family: Verdana; "> This confusion will not occur if you do not allow unquoted names. (IE6, IE8, FF3&nbsp;all report it as undefined, btw)<br>&nbsp;<br>The app I work on for my employer&nbsp;has a lot of JSON with unquoted names&nbsp;that gets sent from the server for AJAX calls. I don't think there would be any uprising over having to go back and quote the names. That is not a major undertaking for our app&nbsp;at least.<span class="Apple-converted-space">&nbsp;</span></div></span></blockquote><div><br></div>Could you say why that app does not quote names? Was it an accident that did not get caught because of an eval-based JSON decoder, or was it intended for some reason?</div><div><br></div><div>/be</div><div><br><blockquote type="cite"><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0; "><div class="hmmessage" style="font-size: 10pt; font-family: Verdana; "><br>&nbsp;<br>Thanks,<br>Matt Miller<br><br>&nbsp;<br>> From:<span class="Apple-converted-space">&nbsp;</span><a href="mailto:brendan@mozilla.org">brendan@mozilla.org</a><br>> To:<span class="Apple-converted-space">&nbsp;</span><a href="mailto:david-sarah@jacaranda.org">david-sarah@jacaranda.org</a><br>> Subject: Re: Pseudo-JSON with unquoted property names<br>> Date: Thu, 4 Jun 2009 16:37:19 -0700<br>> CC:<span class="Apple-converted-space">&nbsp;</span><a href="mailto:es5-discuss@mozilla.org">es5-discuss@mozilla.org</a><br>><span class="Apple-converted-space">&nbsp;</span><br>> Thanks very much. Not very ha-ha funny, but I LOLed at points ;-).<br>><span class="Apple-converted-space">&nbsp;</span><br>> These seem old enough (two years), and otherwise flaky enough, to<span class="Apple-converted-space">&nbsp;</span><br>> reject as strong precedent. Live pseudo-JSON still hosted or generated<span class="Apple-converted-space">&nbsp;</span><br>> by running web apps would be much more compelling.<br>><span class="Apple-converted-space">&nbsp;</span><br>> /be<br>><span class="Apple-converted-space">&nbsp;</span><br>> On Jun 4, 2009, at 4:11 PM, David-Sarah Hopwood wrote:<br>><span class="Apple-converted-space">&nbsp;</span><br>> > Brendan Eich wrote:<br>> >> On Jun 3, 2009, at 10:02 PM, Allen Wirfs-Brock wrote:<br>> >>>> From: <a href="mailto:es5-discuss-bounces@mozilla.org">es5-discuss-bounces@mozilla.org</a> [<a href="mailto:es5-discuss-">mailto:es5-discuss-</a><br>> >>>><br>> >>>>>> - unquoted property names, matching &lt;IdentifierName>, in<br>> >>>>>> object literals.<br>> >>>>><br>> >>>>> Why? Had JSON been defined after ES5, no doubt it would have<span class="Apple-converted-space">&nbsp;</span><br>> >>>>> accepted<br>> >>>>> these. But that's spilled milk under the bridge on which the<span class="Apple-converted-space">&nbsp;</span><br>> >>>>> train has<br>> >>>>> already passed.<br>> >>>><br>> >>>> This has nothing to do with ES5. It is about the fact that there<span class="Apple-converted-space">&nbsp;</span><br>> >>>> is a<br>> >>>> *lot* of nonconformant pseudo-JSON out there that has unquoted<span class="Apple-converted-space">&nbsp;</span><br>> >>>> property<br>> >>>> names. Rejecting it will make the ES5 JSON parser significantly<span class="Apple-converted-space">&nbsp;</span><br>> >>>> less<br>> >>>> useful and less interoperable.<br>> >>><br>> >>> The IE8 implementation of JSON.parse does not allow unquoted<span class="Apple-converted-space">&nbsp;</span><br>> >>> property<br>> >>> names. While I have seen reports regarding several issues with the<span class="Apple-converted-space">&nbsp;</span><br>> >>> IE8<br>> >>> implementation,(for example, one site that allowed use of single<br>> >>> quotes as string quotes within JSON text) I have yet to hear any<br>> >>> complaints about not allowing unquoted property names. This doesn't<br>> >>> prove that such pseudo-JSON doesn't exist but it may indicate that<span class="Apple-converted-space">&nbsp;</span><br>> >>> it<br>> >>> isn't a serious problem.<br>> >><br>> >> Same here, we've yet to receive such a bug report.. I can believe<span class="Apple-converted-space">&nbsp;</span><br>> >> almost<br>> >> any claim about funny content on the web (not ha-ha funny, either),<span class="Apple-converted-space">&nbsp;</span><br>> >> but<br>> >> it would be great to have some links to public instances of JSON data<br>> >> with unquoted property names.<br>> >><br>> >> David-Sarah, can you cite any?<br>> ><br>> > Documentation for an emitter that produces unquoted property names<span class="Apple-converted-space">&nbsp;</span><br>> > (UPNs)<br>> > by default:<br>> > &lt;<a href="http://www.uize.com/reference/uize.json.html#2_2_7">http://www.uize.com/reference/uize.json.html#2_2_7</a>><br>> ><br>> ><br>> > Blog post about Ruby on Rails' JSON emitter prior to version 2.0<br>> > (released in December 2007) producing UPNs:<br>> > &lt;<a href="http://blog.codefront.net/2007/06/20/how-to-get-strictly-valid-json-from-rails/">http://blog.codefront.net/2007/06/20/how-to-get-strictly-valid-json-from-rails/</a><span class="Apple-converted-space">&nbsp;</span><br>> > ><br>> ><br>> ><br>> > These two emitters are interesting because they both have or had an<br>> > option controlling whether to produce unquoted or quoted property<span class="Apple-converted-space">&nbsp;</span><br>> > names,<br>> > with a deliberate decision (later reversed in the Rails case) to make<br>> > unquoted the default. So this cannot be attributed merely to<span class="Apple-converted-space">&nbsp;</span><br>> > implementor<br>> > laziness or carelessness, since they had to do more work in order to<br>> > support both options.<br>> ><br>> > For Rails, see &lt;<a href="http://www.ruby-forum.com/topic/124797">http://www.ruby-forum.com/topic/124797</a>> and<br>> > &lt;<a href="http://dev.rubyonrails.org/changeset/6443#file5">http://dev.rubyonrails.org/changeset/6443#file5</a>> for more evidence<span class="Apple-converted-space">&nbsp;</span><br>> > that<br>> > this was a deliberate design decision.<br>> ><br>> ><br>> > Documentation of a format claimed to be JSON but with UPNs:<br>> > &lt;<a href="http://simile.mit.edu/wiki/Exhibit/Creating,_Importing,_and_Managing_Data">http://simile.mit.edu/wiki/Exhibit/Creating,_Importing,_and_Managing_Data</a><span class="Apple-converted-space">&nbsp;</span><br>> > ><br>> ><br>> > ["Property names that don't contain non-alphanumeric characters, e.g.,<br>> > label and worksAt, don't need to be quoted..."]<br>> ><br>> ><br>> > Bug report about as3corelib's JSON parser needing to accept UPNs:<br>> > &lt;<a href="http://code.google.com/p/as3corelib/issues/detail?id=35">http://code.google.com/p/as3corelib/issues/detail?id=35</a>><br>> > and with a real-world example of pseudo-JSON:<br>> > &lt;<a href="http://code.google.com/p/as3corelib/issues/detail?id=83">http://code.google.com/p/as3corelib/issues/detail?id=83</a>><br>> > Related blog post:<br>> > &lt;<a href="http://www.darronschall.com/weblog/2007/07/parse-errors-with-actionscript-3s-json-library.cfm">http://www.darronschall.com/weblog/2007/07/parse-errors-with-actionscript-3s-json-library.cfm</a><span class="Apple-converted-space">&nbsp;</span><br>> > ><br>> ><br>> ><br>> > A couple more examples of pseudo-JSON:<br>> > &lt;<a href="http://bytes.com/groups/javascript/714878-json-object-not-parsing-firefox">http://bytes.com/groups/javascript/714878-json-object-not-parsing-firefox</a><span class="Apple-converted-space">&nbsp;</span><br>> > ><br>> > &lt;<a href="http://dev.rubyonrails.org/ticket/10133">http://dev.rubyonrails.org/ticket/10133</a>><br>> ><br>> > --<span class="Apple-converted-space">&nbsp;</span><br>> > David-Sarah Hopwood ⚥<span class="Apple-converted-space">&nbsp;</span><a href="http://davidsarah.livejournal.com">http://davidsarah.livejournal.com</a><br>> ><br>> > _______________________________________________<br>> > es5-discuss mailing list<br>> ><span class="Apple-converted-space">&nbsp;</span><a href="mailto:es5-discuss@mozilla.org">es5-discuss@mozilla.org</a><br>> ><span class="Apple-converted-space">&nbsp;</span><a href="https://mail.mozilla.org/listinfo/es5-discuss">https://mail.mozilla.org/listinfo/es5-discuss</a><br>><span class="Apple-converted-space">&nbsp;</span><br>> _______________________________________________<br>> es5-discuss mailing list<br>><span class="Apple-converted-space">&nbsp;</span><a href="mailto:es5-discuss@mozilla.org">es5-discuss@mozilla.org</a><br>><span class="Apple-converted-space">&nbsp;</span><a href="https://mail.mozilla.org/listinfo/es5-discuss">https://mail.mozilla.org/listinfo/es5-discuss</a><br></div></span></blockquote></div><br></body></html>