Javascript 将对象数组发送到节点/解析到Json

Javascript 将对象数组发送到节点/解析到Json,javascript,json,Javascript,Json,我正在尝试将对象数组发送到节点。 如果我在不使用stringify的情况下发送它,我将得到一个与我发送的长度相同的数组,但为空([“”,“”]) 如果我将其与JSON.stringify一起发送,结果如下: {{{“itemNumber”:“13544”,“currentShelf”:“1A1”,“amount”:“1”,“newShelf”:“actionType”:“in”,“whareHouse”:“Main”},{“itemNumber”:“13544”,“currentShelf”:“

我正在尝试将对象数组发送到节点。 如果我在不使用stringify的情况下发送它,我将得到一个与我发送的长度相同的数组,但为空
([“”,“”])

如果我将其与JSON.stringify一起发送,结果如下:

{{{“itemNumber”:“13544”,“currentShelf”:“1A1”,“amount”:“1”,“newShelf”:“actionType”:“in”,“whareHouse”:“Main”},{“itemNumber”:“13544”,“currentShelf”:“1B1”,“amount”:“1”,“newShelf”:“actionType”:“in”,“whareHouse”:“Main”}:“}

我就是这样发送的:

      for (var i=1; i<=m; i++){

            itemIdTemp= document.getElementById("itemIdShell"+i).value;
            shellTemp= document.getElementById("id_shell"+i).value.toUpperCase();
            newShellTemp= document.getElementById("id_shell_new"+i).value.toUpperCase();
            shellAmountTemp = document.getElementById("amountShell"+i).value;
            itemAmount=0;
            let itemData={
                        itemNumber:itemIdTemp,
                        currentShelf:shellTemp,
                        amount:shellAmountTemp,
                        newShell:newShellTemp,
                        actionType:direction,
                        whareHouse:"Main",
                        };
            console.log(itemData);
            itemsObject.push(itemData);

        }
        console.log(itemsObject);



        $.post('/itemShell/updateMulti', 
                    JSON.stringify(itemsObject),
                    function(data){  
                        console.log(data);
                    });

for(var i=1;i看看这个示例代码

const jsObjectArray = [
  {name: "Homer", age:56 },
  {name: "Marge", age:50 },
];
const buf = JSON.stringify(jsObjectArray);
console.log("Stringified object: "+buf);
//
// Now convert it back to an object
//
const newObject = JSON.parse(buf);
console.log("Reconstituted object: "+newObject);
它也在这个代码笔中:


我的人在发送之前先在字符串上做了一点工作

首先获取stringify返回的字符串

var json_string = JSON.stringify(itemsObject);

var string = json_string.replace("'", "\'");

string = '{\'[{"itemNumber":"13544","currentShelf":"1A1","amount":"1",
"newShelf":"","actionType":"in","whareHouse":"Main"},
{"itemNumber":"13544","currentShelf":"1B1","amount":"1",
"newShelf":"","actionType":"in", "whareHouse":"Main"}]\': \'\' }';

first_str = string.split("': ");  // remove the last useless chars

second  = first_str[0].substring(2, first_str[0].length);  // remove the first two chars

$.post('/itemShell/updateMulti', second,
                function(data){  
                    console.log(data);
                });
第二个应该具有正确的字符串

祝你好运,我发现了问题。 发布到节点时必须声明为JSON类型,因此需要使用ajax:

                $.ajax({
                        url: '/itemShell/updateMulti',
                        type:"POST",
                        data:JSON.stringify(dataTosend),
                        contentType:"application/json; charset=utf-8",
                        dataType:"json",
                        success: function(){}
                   }
我还将其更改为对象类型,如下所示:

            dataToSend={dataArr:itemsObject}

所以在节点中它显示为数组

如何发送?!此JSON无效,
JSON。stringify
不会产生此结果。这是将stringify转换为普通对象的数组的结果。请提供复制问题的相关代码,因为您的stringify对象字符串无效,JSON格式不使用单引号。我更改了它,s直到相同的结果,node都不会。数据是以我写的另一种类型发送的。如果你试用这个测试仪,你会发现它确实有效。我认为OP的意思是服务器上的数据就是这样。他们还没有说他们可以访问服务器代码。此外,以这种奇怪的格式发送数据有点愚蠢,因为你可以“我不知道怎么做才是明智的。服务器上有什么,你读过上面的代码吗?他可以访问这里使用的所有变量。这里没有任何wierd,只有js拆分。我想
string
只会出现在服务器上,因为我猜测这是怎么发生的(请参阅我对这个问题的评论)。他们没有对服务器说太多-他们显然可以调试,但不一定要更改代码。如果
':
后面没有空格,或者
字符串在
[
之前有空格,或者如果
':
出现在JSON字符串文本中(例如
“currentShelf:”:“:”,
),则代码将失败。我承认这可能不是一个很好的方法。但是如果他们太草率以至于依赖这样的字符串,那么他们可能没有一个明确定义的接口,这是很糟糕的。服务器上显示的结果是由于JSON.Strigfy方法的结果,如@gabibrk所说。所以我们可以处理它。解决这个问题的方法总是b这也是一样的,因为我们只是在逃避gabibrk确认的引用,这是JSON.Strigfy的结果。此外,这只是一个解决办法,我对JSON字符串没意见。我抱怨的是它周围那些毫无意义的额外内容。“解决这个问题的方法总是一样的…”如果你说假设额外内容的确切结构不会改变是安全的,那么你可能是对的,但最好完全避免这种情况。我不知道字符串是如何生成的,OP可能理解得更少,而且据我们所知,它可能会受到服务器升级的影响(或包含
':
)的字符串)。我们不应该求助于解决方法,我们可以做得更好。