I think they are not equivalent in the strict Javascript sense, as the order of the properties in an object is defined (you can iterate over it). It is not to be seen as a pure hash map.

Regards,
Alex

--
Alexander Klimetschek @iPhone


Am 05.06.2009 um 21:00 schrieb "D. Stuart Freeman" <stuart.free...@et.gatech.edu >:

In the example I do both a toString() comparison and an Object comparison to show that it doesn't work. The problem is that in the current setup
is as follows:

JSONObject j = new JSONObject("{a:a, b:b}");
JSONObject j = new JSONObject("{b:b, a:a}");

There's no easy way to find out these are functionally equivalent. The toString() methods of those objects will return them with the properties
in that order and as such will not be equal.  Calling .equals on the
JSONObjects won't work either because it calls Object.equals which is
false.

On Fri, Jun 05, 2009 at 12:16:13PM -0500, John Crawford wrote:
Well in you're example you used toString() before comparing.

Sent from my iPhone

On Jun 5, 2009, at 12:14 PM, "D. Stuart Freeman"
<stuart.free...@et.gatech.edu> wrote:

I just realized this is because JSONObject doesn't override equals.
Maybe it should?

On Fri, Jun 05, 2009 at 01:10:30PM -0400, D. Stuart Freeman wrote:
Should it hold that if we have two JSONObjects, j and k, that if
j.toString().equals(k.toString()) then j.equals(k)?  I ask because
I've
found that it's possible to create JSONObjects where that isn't the
case.
Here's a quick, minimal example I worked up:
http://pastebin.com/f12de25b9

--
D. Stuart Freeman
Georgia Institute of Technology



--
D. Stuart Freeman
Georgia Institute of Technology

--
D. Stuart Freeman
Georgia Institute of Technology

Reply via email to