Как установить ключ массива JSON в array.push в JavaScript

Я делаю некоторый код JS, где мне нужно установить переменную в качестве ключа в массиве JSON с помощью Javascript array.push():

var test = 'dd'+questNumb;
window.voiceTestJSON.push({test:{"title":""}, "content":{"date":""}});

Где questNumb — еще одна переменная. Когда я делаю этот код, часть, где я просто пишу переменную test, просто становится ключом "test", поэтому я понятия не имею, как заставить это работать. Как это могло произойти? Спасибо!


person pmerino    schedule 05.01.2012    source источник
comment
возможный дубликат Передача динамических пар ключ:значение в литерал объекта ?   -  person Felix Kling    schedule 05.01.2012


Ответы (4)


Если вам нужны переменные в качестве ключей, вам нужны скобки:

var object = {};
object['dd'+questNumb] = {"title":""};
object["content"] = {"date":""};  //Or object.content, but I used brackets for consistency
window.voiceTestJSON.push(object);
person Dennis    schedule 05.01.2012

Вам нужно сделать что-то вроде этого:

var test = "dd" + questNumb,
    obj = {content: {date: ""}};

// Add the attribute under the key specified by the 'test' var
obj[test] = {title: ""};

// Put into the Array
window.voiceTestJSON.push(obj);
person jabclab    schedule 05.01.2012

(Во-первых, у вас нет массива JSON, у вас есть объект JavaScript. JSON — это строковое представление данных с синтаксисом, похожим на синтаксис объектного литерала JavaScript.)

К сожалению, когда вы используете синтаксис литерала объекта JavaScript для создания объекта, вы не можете использовать переменные для установки имен динамических свойств. Сначала вы должны создать объект, а затем добавить свойства, используя синтаксис obj[propName]:

var test = "dd" + questNumb,
    myObj = { "content" : {"date":""} };

myObj[test] = {"title" : ""};

window.voiceTestJSON.push(myObj);
person nnnnnn    schedule 05.01.2012
comment
@Dennis - да, подмножество - это обычно используемое слово, хотя, строго говоря, оно не совсем правильно, учитывая, что "[1,2,3]" является допустимым JSON, но является буквальным обозначением массива, а не литеральным обозначением объекта . (Кроме того, я считаю, что есть некоторые символы Юникода, которые допустимы в JSON, но не в JavaScript, хотя я всю жизнь не могу вспомнить подробности, и мне не нужно искать их.) - person nnnnnn; 05.01.2012
comment
Бит Unicode звучит знакомо — я постоянно забываю, что "this" и ["t", "h", "i", "s"] являются допустимыми JSON. - person Dennis; 05.01.2012

{test:{"title":""}, "content":{"date":""}}

это объект JS. Итак, вы помещаете объект в массив voiceTestJSON.

В отличие от JSON, имена свойств объектов JS можно записывать с кавычками или без них.

То, что вы хотите сделать, может быть достигнуто следующим образом:

var test = 'dd'+questNumb;
var newObject = {"content":{"date":""}}; //this part does not need a variable property name
newObject[test] = {"title":""};

Таким образом, вы устанавливаете свойство с именем, содержащимся в тесте, на {"title":""}.

person einPaule    schedule 05.01.2012