2014-01-22 121 views
0

您好,我对azure移动服务自定义API脚本有疑问。创建复杂的JSON对象

我有一个自定义脚本来创建一个JSON响应。 第一步是获得平面物体。

Thsi是我的代码:

var sql = "SELECT [Project].[id] AS [ID]," + 
    "[Project].[Name] AS [Name]," + 
    "FROM [Project]"; 

request.service.mssql.query(sql, [], { 
    success: function(results) { 

     if (results.length === 0) { 
      response.json(statusCodes.OK, results); 
      return; 
     } 

     var resultSet = []; 

     results.forEach(function(poi) { 
      resultSet.push(
       { 
        ID: poi.ID, 
        Name: poi.Name, 
        RelatedObjects: 
        { 
         [ 
          **???** 
         ]       
        }, 
       }); 
     }) 

     response.json(statusCodes.OK, resultSet); 
    } 
}); 

这工作得很好。现在我想通过相关表中的一些子对象来扩展我的结果对象。但不是简单的singel子属性(这很容易通过连接),我想添加从另一个表中选择的子属性的集合。 但我不知道如何获得第二个查询到我的代码? :(

我认为这是对“???”标记的位置。

我想,因为我的结果集是复杂得多的例子显示使用此JSON自创建代码。

请帮帮忙!

回答

0

好,我这个梅西代码解决它... 我敢肯定有一个更优雅的方式来做到这一点,但我没有找到它。

var sql = "SELECT [Project].[ID]" + 
    ",[Project].[Name]" + 
    "FROM [Project]"; 

var sql2 = "SELECT [ID]" + 
    ",[UniqueSN]" + 
    ",[Name]" + 
    "FROM [DataLogger]" + 
    "WHERE [DataLogger].[ProjectID] = ?"; 

request.service.mssql.query(sql, [id], { 

    success: function(results) { 

     var resultSet = []; 

     results.forEach(function(poi) { 

      var loggerResultSet = []; 

      request.service.mssql.query(sql2, [poi.ID], { 
       success: function(results2) { 

        results2.forEach(function(logger) { 
         loggerResultSet.push(
          { 
           ID: logger.ID, 
           Name: logger.Name, 
           UniqueSN: logger.UniqueSN, 
          }); 
        }) 

        resultSet.push(
         { 
          ID: poi.ID, 
          Name: poi.Name, 
          Logger: loggerResultSet, 
         }); 

        response.json(statusCodes.OK, resultSet); 


        console.log(JSON.stringify(resultSet)); 
       } 
      }); 
     }) 
    } 
});