【问题标题】:Convert sql object to valid Json string in node.js - Azure将 sql 对象转换为 node.js 中的有效 Json 字符串 - Azure
【发布时间】:2020-11-17 01:23:07
【问题描述】:

我们正在使用 node.js 在 Azure 服务中创建一个 Web 服务,以从 SQL db 中检索数据。我们正在使用 ClearDB 来做同样的事情。

在检索数据时,它没有以正确的 JSON 格式出现。我们如何将结果 sql 对象转换为 JSON 字符串。

下面是我的代码。

app.get('/android', function(request, response) {
    pool.getConnection(function(err, connection) {
        if(err) { handleErrorResponse(err, response); return; }
            var sql = "select projectname from taggedemployee where empname='test@hotmail.com' and tagflag='accepted'"
        connection.query(sql, {}, function(err, results) {
              connection.release(); // always put connection back in pool after last query
          if(err) { handleErrorResponse(err, response); return;  }
                var proj = JSON.stringify(results);
                console.log(proj);
                console.log(proj[0].projectname);
                 for(var myKey in proj) {
                    console.log("key:"+ myKey+", value:"+proj[myKey]);
                 }
          response.setHeader('Content-Type', 'application/json');
          response.status(200).send(JSON.stringify(results) );

        });
    });
});

我无法操作 JSON 字符串返回的字符串是

[{projectname: "Dominos"}]

我试过JSON.stringify,但没有运气。请帮我解决这个问题

【问题讨论】:

    标签: javascript json node.js azure azure-mobile-services


    【解决方案1】:

    实际上你不需要JSON.stringify()results 已经是你的 javascript 对象,它代表 json 对象的数组。只需使用

    console.log(results[0].projectname);
    

    【讨论】:

      【解决方案2】:

      JavaScript 对象或数组是 JSON,您需要通过函数 evalJSON.parse 将 JSON 字符串转换为 JavaScript 对象。请参考http://www.json.org/js.html

      【讨论】:

        【解决方案3】:

        来自 SQL 服务的响应是 JSON - 如您所示。您需要使用 JSON.parse() 将 JSON 解析为对象。比如:

        app.get('/android', function(request, response) {
            pool.getConnection(function(err, connection) {
                if(err) { handleErrorResponse(err, response); return; }
                    var sql = "select projectname from taggedemployee where empname='test@hotmail.com' and tagflag='accepted'"
                connection.query(sql, {}, function(err, results) {
                      connection.release(); // always put connection back in pool after last query
                  if(err) { handleErrorResponse(err, response); return;  }
                        var proj = JSON.parse(response);
                        console.log(proj);
                  response.setHeader('Content-Type', 'application/json');
                  response.status(200).send(results);
        
                });
            });
        });
        

        JSON.stringify 用于将对象转换为 JSON 字符串。 JSON.parse 用于将 JSON 字符串转换为对象。

        【讨论】:

          【解决方案4】:

          我构建了一个将查询转换为 JSON 的函数,它工作得很好:

          我使用多个表中的日期列,它必须是字符串(这对我来说很好),所以这些列必须被调用/包含“日期”,其他数据列将是浮点 .2f 格式。

          def conv_func(data, columns):
              gen_dict={}
              for j, row in enumerate(data):
                  dict = {}
                  for col in columns:
                      dict[col] = ''
                  for i, val in enumerate(dict.keys()):
                      if 'Date' in val:
                          dict[val]=str(row[i])
                      else:
                          try:
                              dict[val] = round((row[i]),2)
                          except:
                              dict[val]=(row[i])
                  gen_dict[j] = dict
              return list(gen_dict.values())
          

          并为查询本身使用相同的列列表:

          def get_tools():
              cur = set_connection()
              columns=['Col1','Col2','Col3']
              columnsQuery=','.join(columns)
              cur.execute(f"SELECT {columnsQuery} FROM [MyTable] ORDER BY [Col1] DESC")
              data = cur.fetchall()
              return {'success': True, 'data': conv_func(data,columns)}
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-07-14
            • 2011-08-19
            • 1970-01-01
            • 2019-08-27
            • 2020-05-27
            • 1970-01-01
            • 1970-01-01
            • 2011-04-23
            相关资源
            最近更新 更多