简体   繁体   中英

convert complex javascript object to JSON nodejs

I am doing a web scraping task & I want to create a JSON object from that data. This is what I attempt to do to generate my 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); });

When I run this code the console output as below,

 [ { 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] ] } ]

The 'subjectsJsonArray' in 'resultObj' object does not convert to JSON & only shows as [Object]. What is the proper way to create a valid JSON from 'resultObj'(with having a nested object)?

Below is the valid result JSON I need (for this example only 3 object shows inside 'data' ),

 [ { "table": "0", "data": [ { "subject_name": "IT1105 Information Systems & 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 & 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 & Network Administration", "year": "[2019]", "credits": "3", "s_order": "[0]", "result": "C", "online_assignment_result": "-" } ] } ]

Appreciate your help with this as a newbie. thanks!

Just remove these two lines:

const subjectJsonString = JSON.stringify(subjectDataObj);

const subjectJSON = JSON.parse(subjectJsonString);

And edit this line: From subjectsJsonArray.push(subjectJSON); To subjectsJsonArray.push(subjectDataObj);

You can try this code. Here 'obj' is your nested object.

const newObj = JSON.stringify(obj, " ", 2);
console.log(newObj);

Here you can change space by changing third parameter in stringify().

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM