2012-01-25 3 views
2

Я пытаюсь достичь этой структуры (а JSON объекты с массивом внутри):массива Javascript в JSON объекта

var data = { 
    page : 'hello', 
    rows: [ 
      { 
       column: 'two' 
      } 
    ] 
} 

Но я не суметь несчастным, пробовать различные методы, это моя работа продолжается код:

var data = new Array(); 
    data['settings'] = []; 
    var i = 0; 
    var inputName, value; 
    for (i; i < inputs.length; i++){ 
     inputName = $(inputs[i]).attr('name'); 
     value = $(inputs[i]).val(); 
     data['settings'][inputName] = value; 
    } 
    data['page_id'] = page_id; 

Так что я знаю, что имена переменных не совпадают с желаемым примером, но вы получаете общий смысл! На данный момент он просто делает данные пустым массивом. Но мне нужно сделать объект JSON с идеей отправить его на сервер.

ответ

3

Что вы цитируете является JavaScript объекта с массивом JavaScript в нем, не JSON * в поле зрения.

Чтобы создать его, я не думаю, что вы хотите массив на всех, только объект с вложенным объектом:

var data = { 
    settings: {}, 
    page_id: page_id 
}; 
var i, input; 
for (i = 0; i < inputs.length; i++){ 
    input = $(inputs[i]); 
    data.settings[input.attr('name')] = input.val(); 
} 

Это работает, потому что объекты JavaScript являются картами пара имени/значения. Вы можете обратиться к свойству объекта, используя точечную нотацию и буквальное имя свойства:

x = obj.foo; 

... или используя квадратные скобки обозначения и строки имя:

x = obj["foo"]; 

В последнем случае , вы можете использовать любое выражение, которое вы хотите для строки, так, например:

x = obj["f" + "o" + "o"]; 

JavaScript также имеет буквальные инициализатор объектов, которые вы можете использовать т о создании объекта со свойствами уже на нем:

obj = {foo: "bar"}; 

Это создает объект со свойством называется foo со значением "bar" и присваивает объект переменной obj.

Так смотрит снова в блоке кода выше:

  1. Мы создаем объект со свойствами settings и page_id. settings инициализируется пустым объектом; page_id инициализируется значением переменной page_id.

  2. Затем мы прокручиваем ваш inputs и добавляем свойства к settings, используя имя каждого входа, устанавливая значение свойства как значение ввода.

Итак, давайте предположим, что мы имеем

<input name="oneField" value="bar"> 
<input name="anotherField" value="bang"> 
<input name="yetAnotherField" value="cool"> 

... и давайте предположим, что page_id является 3.

Мы в конечном итоге с этой структурой в объекте, на который ссылается переменная data:

{ 
    settings: { 
     oneField: "bar", 
     anotherField: "bang", 
     yetAnotherField: "cool" 
    }, 
    page_id: page_id 
} 

* JSONявляется текстовое обозначение. Когда вы пишете код типа var data = { ... };, вы просто используете JavaScript. JSON - это подмножество литерального синтаксиса JavaScript, разработанного для простого анализа, поэтому, например, он удобен для хранения произвольных сложных данных в хранилищах данных или для извлечения данных с сервера. Вы извлекаете строку, которая содержит данные, а затем разобрать эту строку для создания структуры объекта в памяти.

+0

Блестящий, спасибо, также хорошо убираю код :) – benhowdle89

0
var data = {}; 
data['settings'] = {}; 
var i = 0; 
var inputName, value; 
for (i; i < inputs.length; i++){ 
    inputName = $(inputs[i]).attr('name'); 
    value = $(inputs[i]).val(); 
    data['settings'][inputName] = value; 
} 
data['page_id'] = page_id; 

Это даст вам такой результат, как показано ниже:

{ 
    page_id: 12345, 
    setting: { foo: 'one', bar: 'two'} 
} 
0

Оба [] и new Array() используются для инициализации массива; то, что вам нужно (когда вы пытаетесь сопоставить ключи со значениями), являются объектами; которые инициализируются с использованием либо {}, либо new Object().

var data = {}; 
    data['settings'] = {}; 
    var i = 0; 
    var inputName, value; 
    for (i; i < inputs.length; i++){ 
     inputName = $(inputs[i]).attr('name'); 
     value = $(inputs[i]).val(); 
     data['settings'][inputName] = value; 
    } 
    data['page_id'] = page_id; 

Чтобы помочь вам с синтаксисом, квадратные скобки обозначения требуется только, если член вы отрываясь является переменной, или если ключ содержит зарезервированные слова или специальные символы (пробелы и т.д.). В противном случае вы можете использовать точечную нотацию;

var data = {}; 
    data.settings = {}; 
    var i = 0; 
    var inputName, value; 
    for (i; i < inputs.length; i++){ 
     inputName = $(inputs[i]).attr('name'); 
     value = $(inputs[i]).val(); 
     data.settings[inputName] = value; 
    } 
    data.page_id = page_id; 

При использовании объектов синтаксис литерала ({}) для создания объекта, вы позволили определить пользователей на объекте, а также. Также более распространено объявление переменной цикла в цикле for, а не во внешнем.

var data = { 
     settings: {} 
    }; 
    var inputName, value; 
    for (var i=0; i < inputs.length; i++){ 
     inputName = $(inputs[i]).attr('name'); 
     value = $(inputs[i]).val(); 
     data.settings[inputName] = value; 
    } 
    data.page_id = page_id; 
Смежные вопросы