#jquery #json
Вопрос:
У меня есть структура JSON
{
"sections": [
{
"name": "Section 1",
"pre": "Pre text",
"post": "Post text",
"inputs": [
{
"text_01": "Evidence 01",
"text_02": "Evidence 02",
"textarea_01": "Evidence 03",
"textarea_02": "Evidence 04"
}
]
},
{
"name": "Section 2",
"pre": "Pre text lad",
"post": "Post text bro",
"inputs": [
{
"text_03": "Evidence 05",
"text_04": "Evidence 06",
"textarea_03": "Evidence 07",
"textarea_04": "Evidence 08"
}
]
}
]
}
jQuery, который я должен повторить, это:
$.getJSON( "/training/assets/json/test.json", function( data ) {
$.each( data["sections"], function( key, val ) {
console.log('[ ] Top Level');
console.log(val["name"]);
console.log(val["pre"]);
console.log(val["post"]);
console.log('[ ] Inputs');
$.each( val["inputs"], function( k, v ) {
$.each( val["inputs"][k], function( ke, va ) {
console.log(ke ' - ' va);
});
});
});
});
Это выплевывает следующее, чего я хочу, но мне было интересно, есть ли более чистый способ добиться того же самого?
Комментарии:
1. Я не совсем понимаю, какова цель — если это просто вывод содержимого JSON на консоль, то почему бы просто не сбросить его с помощью
console.log(...)
илиconsole.dir(...)
?items
Для чего используется массив?2. элементы теперь удалены — я хочу иметь возможность динамически создавать форму, поэтому мне нужно будет указать имя, предварительно, текстовые поля и области текста, а затем опубликовать
Ответ №1:
«Очиститель» — очень субъективный термин, но вы можете сделать код более лаконичным, используя функции со стрелками вместе с Object.entries
to для внутреннего цикла.
Кроме того, вы можете получить доступ к свойствам объекта по имени, а не в скобках.
Наконец, вы можете использовать forEach()
вместо jQuery для цикла. На самом деле jQuery вообще не нужен.
let data = {sections:[{name:"Section 1",pre:"Pre text",post:"Post text",inputs:[{text_01:"Evidence 01",text_02:"Evidence 02",textarea_01:"Evidence 03",textarea_02:"Evidence 04"}]},{name:"Section 2",pre:"Pre text lad",post:"Post text bro",inputs:[{text_03:"Evidence 05",text_04:"Evidence 06",textarea_03:"Evidence 07",textarea_04:"Evidence 08"}]}]};
data.sections.forEach(section => {
console.log('[ ] Top Level');
console.log(section.name);
console.log(section.pre);
console.log(section.post);
section.inputs.forEach(input => {
Object.entries(input).forEach(item => console.log(`${item[0]} - ${item[1]}`));
});
});