MobileFirst Adapter:JSON结果顺序与DB数据位置不同

时间:2015-02-26 14:24:15

标签: mysql json adapter ibm-mobilefirst mobilefirst-adapters

我创建了一个logintable,其中包含用户名和密码。 我在MobilFirst environment中配置了适配器。在调用适配器时,我得到了以下输出:

Invocation Result of procedure: 'procedure1' from the MobileFirst Server: 
{
   "isSuccessful": true,
   "resultSet": [
  {
     "pwd": "Harry123",
     "usrname": "Harry"
  }
 ]
}

但在我的数据库中,UserName首先出现,然后是密码。

我的数据库结构:

  

usrname varchar(20)

     

pwd varchar(20)

您能告诉我为什么数据的顺序或位置在调用结果中有所不同。

先谢谢!!

2 个答案:

答案 0 :(得分:2)

适配器将响应转换为JSON并将其发送回客户端。

JSON是unordered 这意味着在您的回复{a:1,b:2}与{b:2,a:1}完全相同。

这是回应的预期方式。

答案 1 :(得分:0)

假设响应看起来像这样

var result = { "resultSet": [
  {"pwd": "Harry123", "usrname": "Harry", "age": 2 },
  {"pwd": "wibble", "usrname": "Dave", "age": 64 },
  { "usrname": "Tarsim", "pwd": "2020", "age": 27 }
  // many more records here
]};

我们对“戴夫”的数据很感兴趣。我们可以遍历结果集寻找Dave:

 var rs = result.resultSet;
 for ( i = 0; i < rs.length; i++) {   
        if ( rs[i].usrname == "Dave ) {
            // do something with rs[i]
        } 
 }

我经常发现我想通过某些字段快速访问记录,例如usrname,所以我创建了一个地图 - 记住JavaScript对象可以被视为关联数组:

var rsMap = {};
var i;
for ( i = 0; i < rs.length; i++) {   
     rsMap[rs[i].usrname] = rs[i];
     }

现在我们可以简单地引用rsMap [anyUsrName],例如Dave的pwd:

rsMap["Dave"].pwd;

或Tarsim的年龄:

var name = "Tarsim";
rsMap[name].age

或与Harry的记录合作:

var name = "Harry";
var record = rsMap[name];