Javascript JSON字符串化数组的值
我正在尝试字符串化一个对象,但不知道为什么它不能按预期工作:Javascript JSON字符串化数组的值,javascript,json,Javascript,Json,我正在尝试字符串化一个对象,但不知道为什么它不能按预期工作: function request(url) { this.url = url; this.head = []; } var r = new request("http://test.com"); r.head["cookie"] = "version=1; skin=new"; r.head["agent"] = "Browser 1.0"; document.write(JSON.stringify(r)); 我希望这个
function request(url) {
this.url = url;
this.head = [];
}
var r = new request("http://test.com");
r.head["cookie"] = "version=1; skin=new";
r.head["agent"] = "Browser 1.0";
document.write(JSON.stringify(r));
我希望这个对象可以字符串化为:
{"url":"http://test.com","head":["cookie":"version=1; skin=new", "agent":"Browser 1.0"]}
但我只得到:
{"url":"http://test.com","head":[]}
如何修复它?我认为,您希望r的hear属性是一个关联数组(类似于PHP)。它们不存在于JavaScript中。数组的值由数字索引 由于r.head是一个对象(array在JS中是object),您可以使用
r.head[“which property name”]=“value”
向其添加属性,但在使用JSON.stringify时,这些属性似乎不会序列化为JSON,因为r.head
被定义为一个数组,并且它只会序列化编号的索引值
要解决这个问题,您可以将r.head
定义为一个对象,以便JSON.stringify将序列化所有属性
function request(url) {
this.url = url;
this.head = {};
}
var r = new request("http://test.com");
r.head["cookie"] = "version=1; skin=new";
r.head["agent"] = "Browser 1.0";
document.write(JSON.stringify(r));
如果在cosole中运行以下代码(在浏览器中按F12键),您将看到数组的序列化方式与对象的序列化方式不同:
var b = [];
b.something=22
console.log(b.something);
console.log(JSON.stringify(b));//=[]
console.log(b.hasOwnProperty("something"))//=true
b = {};
b.something=22
console.log(b.something);
console.log(JSON.stringify(b));//={"something":22}
console.log(b.hasOwnProperty("something"))//=true
以您希望的方式序列化它是不可能的 有了这个目标:
function request(url) {
this.url = url;
this.head = [];
}
这种变化:
var r = new request("http://test.com");
r.head.push({"cookie": "version=1; skin=new"});
r.head.push({"agent": "Browser 1.0"});
document.write(JSON.stringify(r));
将给你:
{"url":"http://test.com","head":[{"cookie":"version=1; skin=new"},{"agent":"Browser 1.0"}]}
{"url":"http://test.com","head":{"cookie":"version=1; skin=new","agent":"Browser 1.0"}}
如果要将对象更改为:
function request(url) {
this.url = url;
this.head = {};
}
var r = new request("http://test.com");
r.head["cookie"] = "version=1; skin=new";
r.head["agent"] = "Browser 1.0";
document.write(JSON.stringify(r));
将给你:
{"url":"http://test.com","head":[{"cookie":"version=1; skin=new"},{"agent":"Browser 1.0"}]}
{"url":"http://test.com","head":{"cookie":"version=1; skin=new","agent":"Browser 1.0"}}
第一个变量保证在迭代时按顺序为您提供头值。它还有一个优点,就是如果您感兴趣的话,可以在以后按特定顺序插入内容
按照惯例,第二个版本将按照插入的顺序返回项目,只要没有基于数字的键,但ecma规范不保证该顺序。可能重复