Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSON.stringify未正确转换array.object_Javascript_Json - Fatal编程技术网

Javascript JSON.stringify未正确转换array.object

Javascript JSON.stringify未正确转换array.object,javascript,json,Javascript,Json,我对JSON.stringify有问题 我正试图从页面中取出所有的元标记,并将它们传递到firefox工作文件中,以处理它们并返回一个对象 因此,我的代码以前在没有工作人员运行的情况下可以正常工作。只有当我转到使用工作人员文件时,问题才会出现(由于我无法进入我需要使用工作人员的原因!) 所以之前我会使用 var metas = document.getElementsByTagName("meta"); 然后我可以使用 for (var index in metas){ var curre

我对JSON.stringify有问题

我正试图从页面中取出所有的元标记,并将它们传递到firefox工作文件中,以处理它们并返回一个对象

因此,我的代码以前在没有工作人员运行的情况下可以正常工作。只有当我转到使用工作人员文件时,问题才会出现(由于我无法进入我需要使用工作人员的原因!)

所以之前我会使用

var metas = document.getElementsByTagName("meta");
然后我可以使用

for (var index in metas){
  var currentMeta = metas[index];
//(and so on, this code worked perfectly)
当我移动到外部工作者文件场景时,问题就出现了。 所发生的事情是,我像往常一样拉出meta标记,然后使用JSON.stringify将其推送到worker

在所有这些介绍之后,以下是我问题的根源: 举个例子,我在html中使用以下代码登录到一个页面

<meta content="width=1024" name="viewport">
<meta charset="UTF-8">
<meta content="Mozilla Hacks – the Web developer blog" name="title">
返回一个包含3个元素的数组

[meta, meta, meta]
如果我使用以下命令将其字符串化:

var jsonMetas = JSON.stringify(metas);
我希望jsonMetas能够保存以下内容:

{"0":{"content":"width=1024","name":"viewport"},"1":{"charset":"UTF-8"},"2":{"content":"Mozilla Hacks - the web developer blog","name":"title"} }
但是,当我查看jsonMetas对象时,我看到返回了以下内容:

{"0":{"constructor":{}},"1":{"constructor":{}},"2":{"constructor":{}}}

我不太擅长JavaScript,所以你能解释一下(用非常简短的词:)发生了什么吗

为什么stringify调用返回异常结构化的对象? 我做错了什么

提前感谢您的回答。

原因是document.getElementsByTagName不返回JSON,而是返回XML。因此,您需要使用类似这样的方法来获得所需的输出:

var jsonMetas = [];
for (i=0 ; i<metas.length ; i++) {
    var thisMeta = {};
    for (j=0 ; j<metas[i].attributes.length ; j++) {
        thisMeta[metas[i].attributes[j].name] = metas[i].attributes[j].value;
    }
    jsonMetas.push(thisMeta);
}
var-jsonMetas=[];
对于(i=0;i而言,原因是document.getElementsByTagName不返回JSON,而是返回XML。因此,您需要使用类似于以下的方法来获得所需的输出:

var jsonMetas = [];
for (i=0 ; i<metas.length ; i++) {
    var thisMeta = {};
    for (j=0 ; j<metas[i].attributes.length ; j++) {
        thisMeta[metas[i].attributes[j].name] = metas[i].attributes[j].value;
    }
    jsonMetas.push(thisMeta);
}
var-jsonMetas=[];
对于(i=0;i您可以使用:

您可以使用:


它返回的dom对象不是XML@meandmycode嗯,实际上它返回JSON。请看我答案的底部。不,getElementsByTagName返回DOM对象,而不是XML或JSON。例如,这些东西与此层完全无关。我完全可以从createElement等创建并填充文档。看不到XML或JSON。另外,如果你认为访问我所有的问题和答案并对它们进行向下投票会产生影响,那么你需要长大。我不是来这里讨论数字的。它肯定没有功能,而且教育效果很差。broIt返回的不是dom对象XML@meandmycode嗯,实际上它返回JSON。请参阅我答案的底部。不,getElementsByTagName返回DOM ob对象,不是XML或JSON。例如,这些东西与这一层完全无关。我完全可以从createElement等创建并填充文档。看不到XML或JSON。此外,如果你认为访问我所有的问题和答案并对它们进行向下投票会产生影响,那么你需要长大。我不是来这里麻木的呃。它肯定没有功能,而且教育效果很差。博洛特太棒了!干杯,达林,它工作得很好:)有趣的是,为什么我的代码创建了一个不寻常的对象结构?太棒了!干杯,达林,它工作得很好:)有趣的是,为什么我的代码创建了一个不寻常的对象结构?
var metas = document.getElementsByTagName("meta");
var arr = [];
for (var i = 0; i < metas.length; i++) {
    var obj = {};
    for (var j = 0; j < metas[i].attributes.length; j++) {
        var att = metas[i].attributes[j];
        obj[att.name] = att.value;
    }
    arr.push(obj);
}

var jsonMetas = JSON.stringify(arr);
console.log(jsonMetas);​
[
    {
        "http-equiv": "content-type",
        "content": "text/html; charset=UTF-8"
    },
    {
        "content": "width=1024",
        "name": "viewport"
    },
    {
        "charset": "UTF-8"
    },
    {
        "content": "Mozilla Hacks – the Web developer blog",
        "name": "title"
    }
]