【问题标题】:JSON.Stringify returns empty array when Stringifying array of objectsJSON.Stringify 在对对象数组进行字符串化时返回空数组
【发布时间】:2020-01-18 02:48:17
【问题描述】:

我有一个初始化的数组

var detail = [];
// Have also tried var detail = new Array;

在我的其余代码中,我通过以下方式循环创建一个对象的数据集

while(true) {

   var tempObj = {
      qty : "",
      size : "",
      adr : "",
      dir : ""
   }

   // Some Logic

   tempObj.qty = val;
   tempObj.size = val;
   tempObj.adr = val;
   tempObj.dir = val;

   detail.push(tempObj);
}

然后,当我尝试 JSON.Stringify 我的详细数组以通过 AJAX 请求发送时,它返回一个空白数组 []。这也可以在下面的控制台屏幕截图中看到。

注意:底部的缩进将原型称为对象是因为屏幕截图来自我试图发送到服务器的对象。该对象中还有其他非基于数组的数据。我想对数组进行字符串化,以便正确发送到服务器。

是什么导致了这种行为,我该如何纠正它?

编辑 1:执行 JSON.stringify(detail)

var requestObj = {
     field1: “a”,
     field2: “b”,
     field3: “c”,
     data: JSON.stringify(detail)
}

编辑 2:添加完整的代码块

$("#submit-button").click(function() {
        var reqDate = $("#reqDate").val();
        var wonum = $("#wonum").val();
        var svc = $("#svc").val();
        var complaint = $("#complaint").val();
        var comments = $("#comm").val();
        var detail = new Array;
        var topValid = false;

        $(".tb-rw").each(function() {

            var qty = $(this).find(".quantity");
            var size = $(this).find(".size");
            var adr = $(this).find(".address");
            var dir = $(this).find(".direction");
            var mgk = $(this).find(".mgKey");

            var tempObj = {};

            if(fail == true || topValid == true) {
                alert("Please Make Sure all Inputs are Filled Out");
                return;
            } else {
                //tempArr.push(qty.val(), size.val(), dir.val());
                tempObj.qty = qty.val();
                tempObj.size = size.val();
                tempObj.dir = dir.val();
            }

            findSimilarJobs(adr.val(), mgk.val(), function(data) {
                if(data != "clear") {
                    console.log("FAILED VALIDATION");
                    console.log(data);
                    adr.css('border-color', 'red');
                    alert("Please Make Sure all Addresses are Valid");
                    return;
                } else {
                    //tempArr.push(adr.val());
                    tempObj.adr = adr.val();
                }

                detail.push(tempObj);
            });
        });

        console.log("Preparing to send!");

        var requestData = {
            "requestedDate": reqDate,
            "svc": svc,
            "wonum": wonum,
            "complaint": complaint,
            "comment": comments,
            "data": JSON.stringify(detail)
        };

        console.log(requestData);
        console.log(JSON.stringify(detail));
    });

【问题讨论】:

  • 您可以发布执行stringify 的部分吗?查看整个流程,我们可以弄清楚。
  • 什么打破了循环?你能发布你的实际代码而不是sn-ps吗?
  • 我正在遍历一个类的实例。因此,一旦我完成所有实例,循环就会中断。
  • 只要您问题中的代码没有重现问题,就很难为您提供帮助。
  • 听起来findSimilarJobs是异步的,在这种情况下,您需要阅读:stackoverflow.com/questions/14220321/…

标签: javascript arrays json javascript-objects


【解决方案1】:

Stringify 应该像stringify 一样全部小写,否则将不起作用。就像,这个JSON.Stringify(detail) 应该是这个JSON.stringify(detail)

【讨论】:

  • 不会报错吗? JSON.Stringify 不是函数。
  • 我只是在编辑中写错了,代码使用JSON.stringify() 和小写的S
【解决方案2】:

你的 tempObj 是 JSON 对象,它应该有 key:value 如下所示

while(true) {

   var tempObj = {
      qty : "",
      size : "",
      adr : "",
      dir : ""
   }

   // or you can create empty object 
   //   var tempObj = {};

   tempObj.qty = val;
   tempObj.size = val;
   tempObj.adr = val;
   tempObj.dir = val;

   detail.push(tempObj);
}

【讨论】:

  • 已经在使用键值对 (:) 但我用空对象尝试过它仍然表现出相同的行为
  • 我需要查看更多代码,您现有的代码没有显示您当前面临的任何问题
猜你喜欢
  • 1970-01-01
  • 2014-09-22
  • 2016-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-13
  • 1970-01-01
相关资源
最近更新 更多