2010-05-22 4 views
4

Я последовательно собирать информацию из форм в массивы, как так:объединения JavaScript массивы JSON

list = {"name" : "John", "email" : "[email protected]", "country" : "Canada", "color" : "blue"}; 
identifier = "first_round"; 

list = {"name" : "Harry", "email" : "[email protected]", "country" : "Germany"}; 
identifier = "second_round"; 

Я хочу, чтобы объединить их в чем-то (я, возможно, фигурные скобки, где мне нужны скобки), как:

list_all = { 
"first_round" : 
{"name" : "John", "email" : "[email protected]", "country" : "Canada", "color" : "blue"} , 
"second_round" : 
{"name" : "Harry", "email" : "[email protected]", "country" : "Germany"} 
}; 

таким образом я могу получить доступ к ним как:

alert(list_all.first_round.name) -> John 

(Примечание: имя-значения («имя», «электронная почта», «цвет») в два списка -arrays не совсем одинаковы, количество элементов в каждом списке-массиве ограничено, но не известно заранее; Мне нужно последовательно добавлять только один массив к предыдущей структуре каждый раунд, и может быть любое количество раундов, то есть «третий раунд»: {...}, «четвертый раунд»: {...} и т. Д. .)

В конечном счете, я хотел бы, чтобы он хорошо разбирался в JSON.

Я использую библиотеку jquery, если это помогает.

+0

Замечание, что если вы перечисляя свойства list_all как в 'для (ключ вар в list_all)', порядок свойства не гарантируются. Вы можете получить «second_round» перед «first_round», хотя сначала был определен параметр «first_round». Вместо этого используйте массив, если вы хотите сохранить заказ. См. Http://stackoverflow.com/questions/648139/is-the-order-of-fields-in-a-javascript-object-predicatble-when-looping-through_th – Anurag

+0

Но когда порядок свойств на какой-нибудь важный объект? Если порядок имеет важное значение, тогда используется массив Array. –

+0

@Sean - Если вам нужен прямой доступ к элементам с ключом, но в то же время также нужно итерировать все элементы по порядку. Не абсурдно думать, что кто-то может этого захотеть - Рубин изменил реализацию Hash в 1.9, чтобы гарантировать порядок, потому что кто-то этого хотел. – Anurag

ответ

1

Создать list_all в качестве нового объекта следующим образом:

var list_all = {}; 
list_all[identifier_1] = list_1; 
list_all[identifier_2] = list_2; 
// ... 
+0

+1 - Возможно, стоит отметить, что для действительного json (как кажется, требуется OP) библиотека json2 может быть использована. 'JSON.stringify (list_all)' http://www.json.org/json2.js – user113716

+0

Все часы, которые я потратил на это - как-то я пропустил это: отлично работал, спасибо! – Nat

0

JSON использует объект буквального обозначения. Форма:

var person = { 
"name": "Douglas Adams" 
"age": 42 
}; 

точно такой же (для всех намерений и целей), как:

var person = new Object(); 
person.name = "Douglas Adams"; 
person.age = 42; 

ли это помочь?

Вы также можете использовать

person["age"] 

это то же самое, как

person.age 

и перебрать именованные свойства:

//prints the person.propertyName for all propertyName in person 
for (var propertyName in person) { 
alert(person[propertyName]); 
} 

Вы можете передавать данные в виде строки, используя он взаимодействует с сервером и преобразует его в объект, используя jQuery. Пример:

var jsonString = "{'name': 'Douglas Adams', 'age': 42}"; 
jQuery.parseJson(jsonString); //returns this as an object 

Поиск JSON в API документации JQuery: http://api.jquery.com/

Смежные вопросы