【问题标题】:Cannot stringify an array of object in JS无法在 JS 中对对象数组进行字符串化
【发布时间】:2018-03-23 15:02:27
【问题描述】:

我对 Javascript 感到疯狂,因为我无法让 JSON.stringify 与简单的对象数组一起工作。我在谷歌上搜索过类似的问题,但没有解决我的问题。

代码如下:

console.log(array);
console.log(typeof array);
console.log(Array.isArray(array));
console.log(JSON.stringify(array));

这里是输出:

所以第一行是正确的,这是一个对象数组。 第二行对我来说是错误的,但由于 Javascript 似乎是正确的。第三行是正确的。第四行不正确,数组被字符串化为空对象?

我可能错过了一件愚蠢的事情,但我真的不知道是什么。

谢谢

编辑: 这里我以前是如何全局创建数组的

var array = [];
...
array.push(obj);

EDIT2:完整代码

sendCameras= function(cameraArray){
                var message = {};
                message.cameras =  cameraArray;
                console.log("----------------");
                console.log(cameraArray);
                console.log(typeof cameraArray);
                console.log(Array.isArray( cameraArray));
                console.log(cameraArray.length);
                console.log(JSON.stringify({cameraArray:Array}));
                event.source.postMessage(JSON.stringify(message), event.origin);
            }

调用上一个函数的第二部分代码:

openCamerasByNames= function(cameras){
var cameraToOpen = [];
var openCamerasByIdFromNames =function (){
    external_bloc :for (let i  = 0; i < cameras.length; i++){
        internal_bloc :for (let j  = 0; j  < cameraList.cameras.length; j++){
            if (cameraList.cameras[j].name == cameras[i].name){
                openCameraById(cameraList.cameras[j].id);
                cameraToOpen.push(cameraList.cameras[j]);
                break internal_bloc;
            }
        }
    }
}
sendCameras(cameraToOpen);
...

EDIT3:cameraList 是从 JSON.parse 创建的

【问题讨论】:

  • 数组为空...
  • @smac89 不,它只有一个元素。
  • 呃,你好像说得对?!我添加了 console.log(array.length) 它输出 0.
  • 是的,你得到的输出对于给定的输入毫无意义。确保没有东西劫持了JSONstringify方法
  • 提示:您可以使用&lt;&gt; 按钮创建一个可运行的示例来演示该问题。但是你得到的输出看起来几乎是不可能的。

标签: javascript


【解决方案1】:

您正在字符串化一个对象{},而不是实际的数组。

let cameraArray = [{myObj:"some content"}];

//wrong
console.log(JSON.stringify({cameraArray:Array}));
console.log("array? ", Array.isArray({cameraArray:Array}));

//right
console.log(JSON.stringify(cameraArray));
console.log("array? ", Array.isArray(cameraArray));

【讨论】:

    【解决方案2】:

    我解决了我的问题,但我绝对不知道输出如何显示这一点。

    sendCameras 调用不在合适的位置,它必须在 openCamerasByIdFromNames 的末尾,否则将在推送之前调用 sendCameras。但我不明白输出如何显示一个元素的数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多