Разместить значение из json в input

У меня есть два инпута (может быть и больше) каждый имеет одинаковое имя для формирования массива, в данном случае name="cards[уникальное имя]". Кроме того, есть json из которого мне нужно достать данные по ключу и разместить их в value соответствующего инпута. Т.е. я сравниваю ключ в json c именем инпута и размещаю там значение.

var content = '{"cards":{"title":"1","text":"2"},"active":"1","ver":"v1","sort":"3"}';
var obj = jQuery.parseJSON(content);

var arr = [];
$('.form-component').each(function() {
  arr.push($(this).attr('name'));
});

arr.forEach(function(arr) {
  $('.form-component[name="' + arr + '"]').val(obj[arr]);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js"></script>
<input class="form-component" name="cards[title]" value="">
<input class="form-component" name="cards[text]" value="">
<input class="form-component" name="active" value="">

По коду делаю следующее: собираю все инпут с одинаковым классом и получаю их имена. Формирую из них массив. Потом прохожусь по массиву с именами и подставляю его в obj[arr].

Если инпуты имеет простое имя, например, name="active". То всё работает, а если с name="cards[title]", то нет. Или если вручную указать так: obj.cards['title'] - то же всё хорошо.


Ответы (1 шт):

Автор решения: UModeL

Конкретно эта задача имеет довольно простое решение:

let content = '{"cards": {"title": "1", "text": "2"}, "active": "1", "ver": "v1", "sort": "3"}';
let obj = jQuery.parseJSON(content);

$(".form-component").each(function () {
  let name = $(this).attr("name").match(/([\w_-]+)/gi);
  $(this).val(name.length == 2 ? obj[name[0]][name[1]] : obj[name[0]]);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js"></script>

<input class="form-component" name="cards[title]" value=""> cards-title<br>
<input class="form-component" name="cards[text]" value=""> cards-text<br>
<input class="form-component" name="active" value=""> active

Остаётся добавить проверку для случаев, когда могут отсутствовать какие-либо ключи.

→ Ссылка