Получить данные объекта по id из JSON в html

159
28 августа 2019, 23:20

Столкнулся с проблемой вывода данных из JSON по id. Задача: в модальном окне получить данные определённого объекта по клику на кнопку, к примеру с data-id=1 и т.д

JS:

function init() {
$.getJSON("card.json", jsonOut);
}
function jsonOut(data) {
console.log(data);
var out='';
for (var key in data) {
    out +=`<h2 class="title">${data[key].name}</h2>`;
    out +=`<p class="description">${data[key].description}</p>`;
}
$('.outJson').html(out);
}
$(document).ready(function () {
init();
});

JSON

{
"1" : {
    "name"  : "Name 1",
    "description  : "Description 1", 
    "id"    : 1
},
"2" : {
    "name"  : "Name 2",
    "description  : "Description 2", 
    "id"    : 2
},
"3" : {
    "name"  : "Name 3",
    "description  : "Description 3", 
    "id"    : 3
}
}

В данный момент выводит весь список объектов.

 <button data-id="1"></button>
 <div class="outJSON">
 Name 1
 Description 1
 Name 2
 Description 2
 Name 3
 Description 3
 </div>

Т.е, отсортировать нужный объект по id. В гугле ничего подобного не могу найти, помогите ссылкой на подобный вопрос, или же готовым вариантом. Спасибо!

Answer 1

Лучше всего чтобы ключ объекта и был id, это сильно упрощает поиск, иначе только перебором:

const json = { 
  "1": { 
    "name": "Name 1", 
    "description"  : "Description 1 ",  
    "id": 1 
  }, 
  "2": { 
    "name": "Name 2", 
    "description"  : "Description 2 ",  
    "id": 2 
  }, 
  "3": { 
    "name": "Name 3", 
    "description"  : "Description 3 ",  
    "id": 3 
  } 
}; 
const out = document.getElementById('out'); 
document.querySelectorAll('[data-btn]').forEach(function(item) { 
  item.addEventListener('click', function() { 
    const id = parseInt(this.getAttribute('data-btn')); 
    for (let i in json) { 
      if (json[i].id === id) { 
        out.innerHTML = ` 
          ${json[i].name}<br/> 
          ${json[i].description}<br/> 
        ` 
        return; 
      } 
 
    } 
  }) 
});
<button data-btn="1">1</button> 
<button data-btn="2">2</button> 
<button data-btn="3">3</button> 
<p id="out"></p>

READ ALSO
Как отключить в Sublime Text 3 автозакрытие тегов?

Как отключить в Sublime Text 3 автозакрытие тегов?

Скачал Sublime Text 3, обнаружил не нужную функцию автозакрытия теговПодскажите, как можно ее отключить чтобы все писал я самостоятельно? Плагины...

153
ReadXml в DataSet меняет столбцы местами

ReadXml в DataSet меняет столбцы местами

Немного разобравшись пронял что проблема не в DataGridView

132