簡體   English   中英

如何在node.js中創建JSON數組並將值推入其中

[英]How to create JSON array and push values into it in node.js

我試圖按數組中的鍵,值,然后使用JSON.stringify()將其轉換為JSON。 但這是行不通的。

我的node.js代碼:

var jarray=[];
var json1=""; 

for (var i=0; i<jsonObj["Masters"]['Customer'].length; i++){

     var name= jsonObj["Masters"]['Customer'][i];
      var cust_name=name['Customer_Name'];
      var cust_code=name['Customer_Code'];

    connection.query("SELECT code FROM ((SELECT ccode AS code FROM customermaster WHERE companyid='AXWPM1658D') UNION ALL (SELECT scode AS code FROM suppliermaster WHERE companyid='AXWPM1658D') UNION ALL (SELECT stcode AS code FROM stockmaster WHERE companyid='AXWPM1658D') UNION ALL (SELECT gcode AS code FROM generalledger2 WHERE companyid='AXWPM1658D') UNION ALL (SELECT bcode AS code FROM bankmaster WHERE companyid='AXWPM1658D'))p  where code='"+cust_code+"' ", function(err, rows, fields) {
     if (!err){

        var item ={"customer_name":cust_name ,"customer_code": cust_code };

      jarray.push(item);

    }
      else{
        console.log('Error while performing Query.'+err);
          }
    });

    }

json1=JSON.stringify({jarray:jarray});

var jsonObj1 = JSON.parse(json1); 
console.log("Json:"+jsonObj1);
console.log("arr length:"+jsonObj1.jarray.length);

它打印:

Json:{ jarray: [] }
arr length:0

我的問題是如何在數組中推送值並將其轉換為JSON數組?

您用什么來發出SQL請求? 看起來它具有異步行為。 如果是這樣,則可能是在對數組進行字符串化時為什么數組仍為空的原因。 順便說一句,使SQL請求循環不是很有效。 用一個SQL請求獲取所有結果也許更好,這也將使回調中的字符串化更容易

用這個:

var jarray = [];
var json1 = "";

var async = require('async');

async.forEachLimit(jsonObj["Masters"]['Customer'], 1, function(customer, callback) {

    var name = customer;
    var cust_name = name['Customer_Name'];
    var cust_code = name['Customer_Code'];

    connection.query("SELECT code FROM ((SELECT ccode AS code FROM customermaster WHERE companyid='AXWPM1658D') UNION ALL (SELECT scode AS code FROM suppliermaster WHERE companyid='AXWPM1658D') UNION ALL (SELECT stcode AS code FROM stockmaster WHERE companyid='AXWPM1658D') UNION ALL (SELECT gcode AS code FROM generalledger2 WHERE companyid='AXWPM1658D') UNION ALL (SELECT bcode AS code FROM bankmaster WHERE companyid='AXWPM1658D'))p  where code='" + cust_code + "' ", function(err, rows, fields) {
        if (!err) {

            var item = {
                "customer_name": cust_name,
                "customer_code": cust_code
            };

            jarray.push(item);
            callback();

        } else {
            callback(err);
            console.log('Error while performing Query.' + err);
        }
    });



}, function(err) {
    if (err) {
        console.log(err);
    } else {

        json1 = JSON.stringify({
            jarray: jarray
        });

        var jsonObj1 = JSON.parse(json1);
        console.log("Json:" + jsonObj1);
        console.log("arr length:" + jsonObj1.jarray.length);
    }
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM