Существует файл JSON с массивом типа
{
"general_array":[
{"key_1":["a","b","c"]}
]
}
Я хочу добавить элемент в массив, например
{"key_2":["d","e","f"]}
но значение нового ключа, которое я получаю от переменной, например
var newKey = 'key_2';
Я пытаюсь добавить элемент в существующий массив следующим образом:
// ... getting file content
// var jsonFileContent = '{"general_array":[{"key_1":["a","b","c"]}]}';
var jsonObj = JSON.parse(jsonFileContent);
var newKey = 'key_2';
jsonObj.general_array.push({newKey:['d','e','f']});
var newJsonFileContent = JSON.stringify(jsonObj);
// and rewrite the file ...
// console.log(newJsonFileContent);
Но в файле, который я получаю
{
"general_array":[
{"key_1":["a","b","c"]},
{"newKey":["d","e","f"]}
]
}
т.е. в качестве нового ключа элемента я получаю NAME переменной, но мне нужно его значение VALUE
Как добавить значение?
ОБНОВЛЕНО
Решение с [newKey]
работает в большинстве браузеров, но оно не работает в Internet Explorer 11
Мне нужно решение для работы в IE11 тоже, так что вопрос по-прежнему актуальен
Вы можете использовать [newKey]
чтобы получить значение переменной в качестве имени ключа:
var jsonFileContent = '
{
"general_array":[
{"key_1":["a","b","c"]}
]
}';
var jsonObj = JSON.parse(jsonFileContent);
var newKey = 'key_2';
var tempObj = {};
tempObj[newKey] = ['d','e','f'];
jsonObj.general_array.push(tempObj);
var newJsonFileContent = JSON.stringify(jsonObj);
console.log(newJsonFileContent);
Чтобы использовать значение переменной в качестве ключа JSON, заключите ее в квадратные скобки, например:
{[newKey]:['d','e','f']}
let jsonFileContent = '{"general_array":[{"key_1":["a","b","c"]}]}';
let jsonObj = JSON.parse(jsonFileContent);
let newKey = 'key_2';
jsonObj.general_array.push({[newKey]:['d','e','f']});
let newJsonFileContent = JSON.stringify(jsonObj);
console.log(newJsonFileContent)
Это синтаксис имени вычисляемого имени. Это сглаживание/синтаксическое сахарирование для someObject[someKey] = somevalue
Попробуйте изменить эту строку:
jsonObj.general_array.push({newKey:['d','e','f']});
За это:
var newObj = {};
newObj[newKey] = ['d','e','f'];
jsonObj.general_array.push(newObj);
jsonObj.general_array.push({[newKey]:['d','e','f']});
[ ]
.