【问题标题】:js array to json but some value disappearjs数组到json但一些值消失了
【发布时间】:2016-09-04 22:46:10
【问题描述】:
window.onload = function() {
var arr = new Array;
var jsonObj = {
"123": "234"
};
arr['v'] = "234";
arr[0] = jsonObj;
arr[1] = jsonObj;
console.log(JSON.stringify(arr));
}
上面的代码结果是:
[{"123":"234"},{"123":"234"}]
不知道arr['v']为什么消失了?
【问题讨论】:
标签:
javascript
arrays
json
【解决方案1】:
Object 和 Array 解析为 JSON 的方式不同。
Array 将仅包括数字键,Object 将包括其所有键:
var Arr = [], Obj ={};
Arr[0] = Obj[0] = 'a';
Arr[1] = Obj[2] = 'b';
Arr['key'] = Obj['key'] = 'c';
console.log(JSON.stringify(Arr));
console.log(JSON.stringify(Obj));
所以在您的情况下,您可以简单地使用 Onject 而不是数组:
var arr = new Object;
var jsonObj = {"123":"234"};
arr['v'] = "234";
arr[0] = jsonObj;
arr[1] = jsonObj;
console.log(JSON.stringify(arr));
【解决方案3】:
您不能将字符串用作数组索引,除非它是整数的字符串表示形式。
因此,arr['v'] 没有意义。
This stackoverflow question 更详细,但相关部分:
是的,从技术上讲,数组索引是字符串,但就像 Flanagan 一样优雅
把它放在他的“权威指南”中:
"区分数组索引和对象是有帮助的
属性名称。所有索引都是属性名称,但只有属性名称
0 到 232-1 之间的整数是索引。”
【解决方案4】:
在 JavaScript 中,基本上有两种类型的数组,标准数组和关联数组。标准数组由 [] 定义,因此基于 0 的类型索引。并且在关联数组中由 {} 定义,在这种情况下,您可以将字符串定义为键。因此,在您的代码中,您使用的都是单个数组,这是不可接受的。因此,如果您想要字符串键,请定义另一个数组。