Как добавить элемент в многомерный массив JSON, если ключ элемента является переменной

1

Существует файл 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 тоже, так что вопрос по-прежнему актуальен

  • 3
    jsonObj.general_array.push({[newKey]:['d','e','f']});
  • 1
    Вы ищете синтаксис [ ] .
Показать ещё 1 комментарий
Теги:

3 ответа

4
Лучший ответ

Вы можете использовать [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);
  • 0
    О, похоже, это не работает в IE11. Есть ли обходной путь для браузера?
  • 0
    @stckvrw обновил ответ. Теперь он должен работать в IE.
2

Чтобы использовать значение переменной в качестве ключа 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

2

Попробуйте изменить эту строку:

jsonObj.general_array.push({newKey:['d','e','f']});

За это:

var newObj = {};
newObj[newKey] = ['d','e','f'];
jsonObj.general_array.push(newObj);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню