我有一个javascript关联数组,如下所示
 var my_cars= new Array()
 my_cars["cool"]="Mustang";
 my_cars["family"]="Station Wagon";
 my_cars["big"]="SUV";
我想使用Stringify将其转换为json对象.我想知道转换后json对象的样子.
当我有这个对象时如何将它再次转换回关联数组.
Ray*_*oal 50
首先,通过制作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);
这会警告"野马".
小智 5
不,但用户想使用数组而不是 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"}]"
将我的评论移至答案中,以便我可以向您展示一个代码示例。
这些类型的数组在 JavaScript 中是禁忌。您应该仅将对象用于像这样的非数字键。数组索引应该是数字。Javascript 对象可以使用任意值作为键(就像在您的示例中一样)。数组碰巧“看起来”可以工作,因为数组本身是对象,但你不会发现普通的数组方法可以对它们起作用。例如,看看这个代码示例。
var my_cars= new Array()
my_cars["cool"]="Mustang";
my_cars["family"]="Station Wagon";
my_cars["big"]="SUV";
alert(my_cars.length);  // alerts 0
您仅向基础对象添加了属性,实际上并未向数组添加元素。为此,您应该使用对象,而不是数组。Javascript 实际上没有关联数组。它有一个对象,其属性通常可以像在其他语言中使用关联数组一样使用。但是,它是一个对象,而不是数组。