Using numbers as JSON key.



  • hello, i did some experiment as below.
    i defined a sample data which is exactly the same as data inputed.
    wondering why data[1] returns "undefined" but sampleData[1] is OK?

    Input Parameters

    {
      "scriptName": "KeyTest",
      "scriptData": {
        "1": {"ID":1},
        "2": {"ID":2}
      }
    }
    

    Test Script

    // get log service
    var logService = bridge.getLogServiceProxy();
    
    var sampleData = {
        "1": {"ID":1},
        "2": {"ID":2}
      };
    logService.logInfoJson("sampleData" , sampleData);
    logService.logInfoJson("sampleData[1]" , sampleData[1]);
    
    logService.logInfoJson("data" , data);
    logService.logInfoJson("data[1]" , data[1]);
    

    result
    aeac7350-734f-4477-9ae3-43259d7a6a50-image.png


  • brainCloud

    Hmm, I actually am not sure why sampleData[1] works.

    I would have thought the correct syntax would have be sampleData["1"] and data["1"] ?

    No?



  • @Paul-Winterhalder
    actually i've tried "1" too.
    the result is
    sampleData[1] and sampleData["1"] are both OK,
    data[1] and data["1"] both returned Undefined.
    wondering why...


  • bitHeads

    Here is the thing, the input parameter data returned from our service proxy is a Java Map object, which does NOT support a number value as key when accessing value using object[key] syntax.

    A simple solution for this case is to convert the Java Map object to a real javascript JSON object like below:

    data = JSON.parse(JSON.stringify(data));
    


  • @JasonL
    Thank you!!


Log in to reply