MobileFirst 适配器:JSON 结果顺序与数据库数据位置的顺序不同

MobileFirst Adapter: JSON result order is different as that of the DB data position

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

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

但在我的数据库中,用户名在前,然后是密码。

我的数据库结构:

usrname varchar(20)

pwd varchar(20)

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

提前致谢!!

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

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

这是预期的响应方式。

假设响应如下所示

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" 的数据感兴趣。我们可以遍历结果集寻找 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 的密码:

rsMap["Dave"].pwd;

或塔西姆的年龄:

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

或使用 Harry 的记录:

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