我遇到了JSON.stringify
的问题我正在尝试将所有元标记从页面中拉出来并将它们传递给firefox工作文件以完成它们并返回一个对象。
因此,当我没有工作人员运行该问题时,我的代码以前工作只有在我转移到使用工作文件时才会出现(原因我不能进入我需要使用工作人员!)
所以以前我会使用
获取所有元标记var metas = document.getElementsByTagName("meta");
然后我可以使用
循环遍历metas对象for (var index in metas){
var currentMeta = metas[index];
//(and so on, this code worked perfectly)
当我移动到外部工作程序文件方案时,会出现问题。 发生的事情是我正常拉出meta标签,然后我将JSON.stringify用于我可以推送给工人的东西。
毕竟介绍了blab,这是我问题的根源: 例如,我在html中使用以下代码登陆页面
<meta content="width=1024" name="viewport">
<meta charset="UTF-8">
<meta content="Mozilla Hacks – the Web developer blog" name="title">
如果我运行以下代码,我会得到一个数组
var metas = document.getElementsByTagName("meta");
返回一个数组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调用会返回异常结构化的对象? 我做错了什么?
提前感谢您的回答。
答案 0 :(得分:2)
您可以使用following:
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"
}
]
答案 1 :(得分:1)
原因是 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);
}
此页面的JSON.stringify(jsonMetas)输出:
“[{”name“:”relativepagescore“,”content“:”0“},{”name“:”title“,”content“:”javascript - JSON.stringify没有正确转换array.object - Stack溢出 “}]”