Tuesday, December 27, 2016

JsInterop JSON.parse()ed object differs from JSNI JSON.parse()ed object

Parsing the following JSON input and sending the resulting object to the console yields the expected results for a JSNI JSON.parse() but yields incorrect timestamps using a JsInterop JSON.parse() (with correct results for all other properties).  I'm completely at a loss as to why.  Any suggestions?

Input:

{"Contract":"STK:USD:PBA@NYSE","action":"onHistoricalData","bar":"D","bars":[{"close":21.76,"high":21.84,"low":21.38,"open":21.41,"time":1451520000,"volume":3067},{"close":21.56,"high":21.63,"low":21.14,"open":21.37,"time":1451865600,"volume":2565},{"close":21.49,"high":21.57,"low":21.26,"open":21.5,"time":1451952000,"volume":2303}],"callback":4,"metadata":{"noData":false},"t":1482867635,"t0":1451763575,"ticker":"STK:USD:PBA@NYSE"}

JSNI JSON parser:

native static Object parse( String json ) /*-{ return $wnd.JSON.parse( json ); }-*/;

JsInterop JSON parser:

@JsType( isNative = true, namespace = GLOBAL, name = "JSON" )
abstract public class JSON {
   
native static public <T> T parse( String json );
}


@JsType( isNative = true, namespace = JsPackage.GLOBAL, name = "Object" )
public class Message {
   
public int callback; // HARD-CODED in conjunction with Service::CALLBACK
}


// json from WebSocket
Window.console.info( parse( json ) );
Message message = JSON.parse( json );
Window
.console.debug( message );


console.info:
    1. Object
      1. Contract:"STK:USD:PBA@NYSE"
      2. action:"onHistoricalData"
      3. bar:"D"
      4. bars:Array[3]
        1. 0:Object
          1. close:21.76
          2. high:21.84
          3. low:21.38
          4. open:21.41
          5. time:1451520000
          6. volume:3067
          7. __proto__:Object
        2. 1:Object
          1. close:21.56
          2. high:21.63
          3. low:21.14
          4. open:21.37
          5. time:1451865600
          6. volume:2565
          7. __proto__:Object
        3. 2:Object
          1. close:21.49
          2. high:21.57
          3. low:21.26
          4. open:21.5
          5. time:1451952000
          6. volume:2303
          7. __proto__:Object
        4. length:3
        5. __proto__:Array[0]
      5. callback:4
      6. metadata:Object
        1. noData:false
        2. __proto__:Object
      7. t:1482867635
      8. t0:1451763575
      9. ticker:"STK:USD:PBA@NYSE"
      10. __proto__:Object

console.debug:
    1. Object
      1. Contract:"STK:USD:PBA@NYSE"
      2. action:"onHistoricalData"
      3. bar:"D"
      4. bars:Array[3]
        1. 0:Object
          1. close:21.76
          2. high:21.84
          3. low:21.38
          4. open:21.41
          5. time:1607400000
          6. volume:3067
          7. __proto__:Object
        2. 1:Object
          1. close:21.56
          2. high:21.63
          3. low:21.14
          4. open:21.37
          5. time:1607400000
          6. volume:2565
          7. __proto__:Object
        3. 2:Object
          1. close:21.49
          2. high:21.57
          3. low:21.26
          4. open:21.5
          5. time:1607400000
          6. volume:2303
          7. __proto__:Object
        4. length:3
        5. __proto__:Array[0]
      5. callback:4
      6. metadata:Object
        1. noData:false
        2. __proto__:Object
      7. t:1482867635
      8. t0:1451763575
      9. ticker:"STK:USD:PBA@NYSE"
      10. __proto__:Object

I tested the code in Chrome, Edge, and Safari and each yielded the same results.  Any suggestion as to where things are going awry will be greatly appreciated.

Dave

--
You received this message because you are subscribed to the Google Groups "GWT Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscribe@googlegroups.com.
To post to this group, send email to google-web-toolkit@googlegroups.com.
Visit this group at https://groups.google.com/group/google-web-toolkit.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment