Как через гет запрос разобрать json массив в html
Прошу совета или помощи. Если json файл с данными, в котором могут быть множественные элементы внутри друг друга. Проблема заключается в том, что как получить все вложенные массива у элемента. Первый уровень (так скажем родителей) получаю без проблем. А вот с дочерними - ступор.
$.ajax({
url: '/json/',
type: 'GET',
data: { get_param: 'value' },
dataType: 'json',
success: function (data) {
console.log(data);
$.each(data, function(index, element) {
$('#mobile_menu').append($('<ul>', {
text: element.title + element.url + element.children[title]
}));
});
}
});
});
[
{
"title": "Родитель 1",
"url": "http://domain.com/url/"
},
{
"title": "Родитель 2",
"url": "http://domain.com/url2/",
"children": [{
"title": "Потомок 1",
"url": "http://domain.com/url2/child1/"
},
{
"title": "Потомок 2",
"url": "http://domain.com/url2/child2/"
"children": [{
"title": "Потомок Потомка 1",
"url": "http://domain.com/url2/child1/child2/"
},
{
"title": "Потомок Потомка 2",
"url": "http://domain.com/url2/child1/child3/"
}
]
}
]
},
{
"title": "Родитель 3",
"url": "http://domain.com/url3/"
}]
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
Сделал через рекурсию и накидал простой пример сервера на python + заполнение
Проверка работы функций:
function process_children(children, parent_element) {
if (children) {
let ul = $('<ul>');
parent_element.append(ul);
children.forEach(child_data => {
process_data(child_data, ul);
});
}
}
function process_data(item_data, parent_element) {
let item_element = $('<li>', {
text: `${item_data.title}: ${item_data.url}`
});
parent_element.append(item_element);
process_children(item_data.children, item_element);
}
let data = [
{
"title": "\u0420\u043e\u0434\u0438\u0442\u0435\u043b\u044c 1",
"url": "http://domain.com/url/"
},
{
"children": [
{
"title": "\u041f\u043e\u0442\u043e\u043c\u043e\u043a 1",
"url": "http://domain.com/url2/child1/"
},
{
"children": [
{
"title": "\u041f\u043e\u0442\u043e\u043c\u043e\u043a \u041f\u043e\u0442\u043e\u043c\u043a\u0430 1",
"url": "http://domain.com/url2/child1/child2/"
},
{
"title": "\u041f\u043e\u0442\u043e\u043c\u043e\u043a \u041f\u043e\u0442\u043e\u043c\u043a\u0430 2",
"url": "http://domain.com/url2/child1/child3/"
}
],
"title": "\u041f\u043e\u0442\u043e\u043c\u043e\u043a 2",
"url": "http://domain.com/url2/child2/"
}
],
"title": "\u0420\u043e\u0434\u0438\u0442\u0435\u043b\u044c 2",
"url": "http://domain.com/url2/"
},
{
"title": "\u0420\u043e\u0434\u0438\u0442\u0435\u043b\u044c 3",
"url": "http://domain.com/url3/"
}
]
;
let parent_element = $('#mobile_menu');
process_children(data, parent_element);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<div id="mobile_menu">
</div>
Для ajax:
$(document).ready(function() {
$.ajax({
url: '/json/',
type: 'GET',
dataType: 'json',
success: function (data) {
console.log(data);
let parent_element = $('#mobile_menu');
process_children(data, parent_element);
}
});
});