我有一个javascript关联数组,如下所示
var my_cars= new Array()
my_cars["cool"]="Mustang";
my_cars["family"]="Station Wagon";
my_cars["big"]="SUV";
我想用Stringify把它转换成json对象。我想知道转换后的json对象是什么样子的。
另外,当我拥有这个对象时,我如何将它再次转换回关联数组。
发布于 2011-08-17 15:23:53
首先,通过将my_cars
设置为数组并对其进行字符串化,您不会得到您期望的结果。
var my_cars= new Array()
my_cars["cool"]="Mustang";
my_cars["family"]="Station Wagon";
my_cars["big"]="SUV";
alert(JSON.stringify(my_cars));
这会向[]
发出警报。
您想要的是从{}
开始
var my_cars= {};
my_cars["cool"]="Mustang";
my_cars["family"]="Station Wagon";
my_cars["big"]="SUV";
alert(JSON.stringify(my_cars));
此警报
{"cool":"Mustang","family":"Station Wagon","big":"SUV"}
要从字符串中取回对象,请使用JSON.parse()
。
var s = JSON.stringify(my_cars);
var c = JSON.parse(s);
alert(c.cool);
这会提醒“野马”。
发布于 2016-10-16 18:03:56
不是,但是用户想使用数组而不是json。
普通的JavaScript数组是用来保存带有数字索引的数据的。您可以将命名键填充到它们中(当您想要存储有关包含正常的、有序的、数字索引的数据的数组的元数据时,这可能很有用),但这不是设计它们的目的。JSON数组数据类型不能在数组上具有命名键。
如果需要命名键,请使用对象,而不是数组。
var test = []; // Object
test[0] = 'test'; //this will be stringified
现在,如果您希望数组中的键值对
test[1] = {}; // Array
test[1]['b']='item';
var json = JSON.stringify(test);
输出
"["test",{"b":"item"}]"
因此您可以对数组使用索引,因此也可以
var my_cars= [];
my_cars[0]={};
my_cars[0]["cool"]="Mustang";
my_cars[1]={};
my_cars[1]["family"]="Station Wagon";
my_cars[2]={};
my_cars[2]["big"]="SUV";
console.log(JSON.stringify(my_cars));
输出
"[{"cool":"Mustang"},{"family":"Station Wagon"},{"big":"SUV"}]"
发布于 2011-08-17 15:22:31
将我的评论移动到答案中,这样我就可以向您展示一个代码示例。
这些类型的数组是javascript中的禁忌。您应该只将对象用于如下所示的非数字键。数组索引应为数字。Javascript对象可以对键使用任意值(如您的示例所示)。数组碰巧“看起来”是有效的,因为数组本身就是对象,但你不会发现普通的Array方法会对它们起作用。例如,请看下面的代码示例。
var my_cars= new Array()
my_cars["cool"]="Mustang";
my_cars["family"]="Station Wagon";
my_cars["big"]="SUV";
alert(my_cars.length); // alerts 0
您只向基础对象添加了属性,而没有向Array实际添加元素。为此,您应该使用对象,而不是数组。Javascript实际上没有关联数组。它有一个对象,它的属性通常可以像在其他语言中使用Associate Array一样使用。但是,它是一个对象,而不是数组。
https://stackoverflow.com/questions/7089118
复制相似问题