// It was a primitive wrapper, unwrap it and try again. It looks like javascript's date is a primitive wrapper to a number (maybe seconds from epoch?) Which makes sense as that's the only bit of data it should store. Maybe look at implementing Date with a JavaScriptObject that wraps the object.
On Feb 4, 3:04 pm, Costa <[email protected]> wrote: > I have attempted the following code snippet: > > String data = "new $wnd.Date(2010,0,28,17,8,48,0)"; > JSONValue value = JSONParser.parse(data); > > To my dismay it returns a JSONNumber !! > > Now I looked in the source code (JSONParser.java: parse, evaluate & > createObject) and I created the following test program. > > .... > String data = "new $wnd.Date(2010,0,28,17,8,48,0)"; > myParser(data); > ... > > private native void myParser(String data) /*-{ > var x = eval('(' + data + ')'); > $wnd.alert(" typeof = " + typeof x + ", valueOf = " + > x.valueOf()); > > }-*/; > > The alert displays typeof = object and in valueOf = 1264727328000. > > Because typeof = object the execution flow calls createObject: > > private static native JSONValue createObject(Object o) /*-{ > if (!o) { > return @com.google.gwt.json.client.JSONNull::getInstance()(); > } > var v = o.valueOf ? o.valueOf() : o; > if (v !== o) { > // It was a primitive wrapper, unwrap it and try again. > var func = > @com.google.gwt.json.client.JSONParser::typeMap[typeof v]; > return func ? func(v) : > @com.google.gwt.json.client.JSONParser::throwUnknownTypeException(Ljava/ > lang/String;)(typeof v); > } else if (o instanceof Array || o instanceof $wnd.Array) { > // Looks like an Array; wrap as JSONArray. > // NOTE: this test can fail for objects coming from a different > window, > // but we know of no reliable tests to determine if something is > an Array > // in all cases. > return @com.google.gwt.json.client.JSONArray::new(Lcom/google/ > gwt/core/client/JavaScriptObject;)(o); > } else { > // This is a basic JavaScript object; wrap as JSONObject. > // Subobjects will be created on demand. > return @com.google.gwt.json.client.JSONObject::new(Lcom/google/ > gwt/core/client/JavaScriptObject;)(o); > } > }-*/; > > Please note the line: > > var v = o.valueOf ? o.valueOf() : o; > > What is the reason for doing this? It changes the type of object to > something that is not and that is a number. > > Thanks -- You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
