#javascript #node.js #json #web-scraping #web-deployment
Вопрос:
Я выполняю задачу веб-очистки и хочу создать объект JSON из этих данных. Это то, что я пытаюсь сделать, чтобы сгенерировать свой JSON.
var submitButton = driver.findElement(By.className('btn btn-primary'));
submitButton.click().then(function () {
setTimeout(async function () {
const pagesource = await driver.getPageSource();
const $ = cheerio.load(pagesource);
const tableCount = $('.table , .table-bordered').length;
const tablesJsonArray = [];
for (let i = 0; i < tableCount; i ) {
const subjectsJsonArray = [];
const tableData = $('.table , .table-bordered').eq(i); // HTML table (Academic Year 1/2/3)
const subjectCount = tableData.children('tbody').children('tr').length;
for (let j = 0; j < subjectCount; j ) {
const subjectData = tableData.children('tbody').children('tr').eq(j); // table row
const subjectName = subjectData.children('td').eq(0).text();
const year = subjectData.children('td').eq(1).text();
const credits = subjectData.children('td').eq(2).text();
const sOrder = subjectData.children('td').eq(3).text();
const result = subjectData.children('td').eq(4).text();
const onlineAssignmentResult = subjectData.children('td').eq(5).text();
const subjectDataObj = {
subject_name: subjectName.trim(),
year: year,
credits: credits,
s_order: sOrder,
result: result,
online_assignment_result: onlineAssignmentResult.trim(),
};
const subjectJsonString = JSON.stringify(subjectDataObj);
const subjectJSON = JSON.parse(subjectJsonString);
subjectsJsonArray.push(subjectJSON);
}
const resultObj = {
table: i,
data: subjectsJsonArray
};
const resultJSON = JSON.parse(JSON.stringify(resultObj));
tablesJsonArray.push(resultJSON);
}
console.log(tablesJsonArray);
}, 3000);
});
Когда я запускаю этот код, вывод консоли выглядит следующим образом,
[
{
table: 0,
data: [
[Object], [Object],
[Object], [Object],
[Object], [Object],
[Object], [Object],
[Object], [Object],
[Object], [Object],
[Object]
]
},
{
table: 1,
data: [
[Object], [Object],
[Object], [Object],
[Object], [Object],
[Object], [Object],
[Object], [Object],
[Object], [Object]
]
},
{
table: 2,
data: [
[Object], [Object],
[Object], [Object],
[Object], [Object],
[Object], [Object],
[Object], [Object],
[Object]
]
}
]
Объект ‘subjectsJsonArray’ в объекте ‘resultObj’ не преобразуется в JSON и отображается только как [Объект].
Как правильно создать допустимый JSON из ‘resultObj'(с вложенным объектом)?
Ниже приведен действительный результат JSON, который мне нужен (для этого примера внутри «данных» отображается только 3 объекта).,
[
{
"table": "0",
"data": [
{
"subject_name": "IT1105 Information Systems amp; Technology",
"year": "[2017]",
"credits": "3",
"s_order": "[1]",
"result": "B-",
"online_assignment_result": "P"
},
{
"subject_name": "IT1205 Computer Systems I",
"year": "[2017]",
"credits": "3",
"s_order": "[2]",
"result": "C",
"online_assignment_result": "P"
},
{
"subject_name": "IT1305 Web Application Development I",
"year": "[2017]",
"credits": "3",
"s_order": "[3]",
"result": "B-",
"online_assignment_result": "P"
}
]
},
{
"table": "1",
"data": [
{
"subject_name": "IT3105 Object Oriented Analysis amp; Design",
"year": "[2018]",
"credits": "3",
"s_order": "[1]",
"result": "C ",
"online_assignment_result": "P"
},
{
"subject_name": "IT3205 Fundamentals of Software Engineering",
"year": "[2018]",
"credits": "3",
"s_order": "[2]",
"result": "A-",
"online_assignment_result": "P"
},
{
"subject_name": "IT3305 Mathematics for Computing II",
"year": "[2018]",
"credits": "3",
"s_order": "[3]",
"result": "C",
"online_assignment_result": "P"
}
]
},
{
"table": "2",
"data": [
{
"subject_name": "IT5105 Professional Issues in IT",
"year": "[2019]",
"credits": "3",
"s_order": "[0]",
"result": "B",
"online_assignment_result": "-"
},
{
"subject_name": "IT5405 Fundamentals of Multimedia",
"year": "[2019]",
"credits": "3",
"s_order": "[0]",
"result": "B ",
"online_assignment_result": "-"
},
{
"subject_name": "IT6205 Systems amp; Network Administration",
"year": "[2019]",
"credits": "3",
"s_order": "[0]",
"result": "C",
"online_assignment_result": "-"
}
]
}
]
Ценю вашу помощь в этом как новичка. Спасибо!
Комментарии:
1. Зачем ты танцуешь эти
JSON.parse(JSON.stringify())
танцы? Просто вставьте исходные объекты в свои списки и выполните JSON в самом конце.2. На самом деле я новичок, ты это имел в виду
const resultJSON = JSON.stringify(resultObj));
? или без строгости?3. Вам не нужно использовать какие-либо функции JSON до тех пор, пока вы фактически не выведете данные, например, в файл.
Ответ №1:
Просто удалите эти две строки:
const subjectJsonString = JSON.stringify(subjectDataObj);
const subjectJSON = JSON.parse(subjectJsonString);
И отредактируйте эту строку:
От subjectsJsonArray.push(subjectJSON);
До subjectsJsonArray.push(subjectDataObj);
Ответ №2:
Вы можете попробовать этот код. Здесь «obj» — это ваш вложенный объект.
const newObj = JSON.stringify(obj, " ", 2);
console.log(newObj);
Здесь вы можете изменить пространство, изменив третий параметр в stringify().