JSON.stringify不表示Stringified的Object

时间:2017-10-24 03:46:42

标签: javascript json node.js stringify

我正在为学校项目开发Connect Four应用程序。 目前,我正在尝试JSON.stringify一个包含二维“洞”对象数组的对象(每个对象包含键:x,y,列,行,p1和p2),以便我可以将它发送到服务器,并让它向两个客户广播 - >这将使两个客户的游戏状态保持更新。

在我JSON.stringify(holeObjArray)之前,我控制台。记录了对象的内容,它们显示了更新的游戏状态:

object before stringify

我突出显示(红色):holeObjArray [5] [6]包含一个键'p1'= 1,这对应于当前游戏状态(右侧)。

当我JSON.stringify对象时,在这里看到:

function sendGrid()
{
  console.log(holeObjArray);
  JSONStr = JSON.stringify(holeObjArray);
  console.log(JSONStr);
  //ws.send(JSONStr);
}

JSONStr的输出显示以下内容:

object after stringify

如您所见,字符串化对象不代表当前游戏状态。实际上,如果我继续播放,则字符串化对象将始终代表 last 播放中的电路板状态。 我不明白为什么JSON.stringify()这样做? 特别是因为holeObjArray在我对其进行字符串化之前正确地表示了网格,但是一旦我这样做,JSONStr字符串就代表了刚刚制作的网格。 任何有关此问题的帮助将不胜感激,

谢谢,

Alex

2 个答案:

答案 0 :(得分:1)

在控制台中,展开对象时,它会在您展开对象属性时显示对象属性的值,而不是在将对象属性记录到控制台时。因此,记录对象的JSON.stringify方式是在记录对象时显示当前值的正确方法。

答案 1 :(得分:0)

好的,我为此没有完成而道歉。但我想我至少知道你可以从哪里开始。

我确定你知道,Javascript有一种处理范围的有趣方式,因此有时会产生看似不可预测的状态。我的预感是,在这种情况下,JSON.stringify()方法是hoisted,因此比你想要的更早地为你的JSONStr变量分配一个字符串。

尝试这样的事情:

const sendGrid = function(wholeObjArray) {
  console.log(holeObjArray);
  let JSONStr = JSON.stringify(wholeObjArray);
  return JSONStr;
}
// where gamestate === wholeObjArray
console.log(sendGrid(gameState));
ws.send(sendGrid(gameState));

这应该确保您没有在实际需要之前对JSON对象进行字符串化。

如果有帮助,请告诉我!