Массив Javascript в объекте JSON - PullRequest
3 голосов
/ 25 января 2012

Я пытаюсь получить эту структуру (объект 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 ]

3 голосов
/ 25 января 2012

То, что вы процитировали, является 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;

... или с помощью нотации в скобках и string name:

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 голосов
/ 25 января 2012

И [], и 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;
0 голосов
/ 25 января 2012
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'}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...