Подтвердить что ты не робот

Преобразование ассоциативного массива javascript в объект json с использованием stringify и наоборот

У меня есть ассоциативный массив javascript, похожий на один ниже

 var my_cars= new Array()
 my_cars["cool"]="Mustang";
 my_cars["family"]="Station Wagon";
 my_cars["big"]="SUV";

Я хочу преобразовать его, используя Stringify в json-объект. Я хочу узнать после преобразования, как будет выглядеть объект json.

Также, когда у меня есть этот объект, как я могу снова преобразовать его в ассоциативный массив.

4b9b3361

Ответ 1

Прежде всего, создавая массив 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);

Это предупреждает "Мустанг".

См. http://jsfiddle.net/Y2De9/

Ответ 2

Перемещение моего комментария в ответ, чтобы я мог показать вам пример кода.

Эти типы массивов в 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

У вас есть только добавленные свойства к базовому объекту, а не добавлены элементы в массив. Вы должны использовать объект для этого, а не массив. У Javascript фактически нет ассоциативного массива. У него есть объект, свойства которого часто можно использовать, как если бы использовался ассоциированный массив на других языках. Но это объект, а не массив.

Ответ 3

Нет, но пользователь хочет использовать массив не 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"}]"

Ответ 4

Если по какой-то причине вы не можете преобразовать свой массив в объект, например, вы работаете над большой каркасной или устаревшим кодом, который вы не хотите касаться, и ваша работа заключается только в том, чтобы добавить функцию som, которая требует использования API JSON, вы должны рассмотрите возможность использования JSON.stringify(json, function (k, v) {}) версии API. В функции теперь вы можете решить, что делать со значением ключа определенного типа.