Estoy tratando de obtener una estructura anidada a partir de una consulta de MySQL y, como resultado del uso de JSON_OBJECT, una sección de mis datos devueltos está encadenada. Los datos que estoy recibiendo actualmente se ven de la siguiente manera:
[ { "id": 3, "body": "Does this product run big or small?", "date_written": 1608535907, "asker_name": "jbilas", "helpful": 8, "reported": 0, "answers": null }, { "id": 4, "body": "How long does it last?", "date_written": 1594341317, "asker_name": "funnygirl", "helpful": 6, "reported": 0, "answers": "{\"65\": {\"id\": 65, \"body\": \"It runs small\", \"date\": 1605784307, \"helpful\": 1, \"reported\": 0, \"answerer_name\": \"dschulman\"}, \"89\": {\"id\": 89, \"body\": \"Showing no wear after a few months!\", \"date\": 1599089610, \"helpful\": 8, \"reported\": 0, \"answerer_name\": \"sillyguy\"}}" }, {etc}, {etc}]Antes de enviar el resultado de mi consulta a la base de datos al cliente, necesito analizar el valor de las respuestas. Mi pensamiento inicial fue hacer que el resultado fuera una promesa, luego usar un bucle forEach para ejecutar cada objeto y analizar las 'respuestas' si no está indefinido. Mi código para hacer eso está organizado de la siguiente manera:
db.query(query, [req.query['product_id'], req.query['count']], (error, results) => { if (error) { console.log('err err ', error); } if (!results[0]) { res.json('No questions found') } else { console.log(results) Promise.resolve(results.forEach(result => { if (result['answers'] !== undefined) { JSON.parse(result['answers']); } return results; })) .then(results => { console.log(results) }) res.json(results.splice(0, req.query['count'])); } })El registro de la consola en mi bloque 'entonces' devuelve indefinido. También intenté usar results.map(), pero esto registró un montón de matrices vacías en el bloque luego. ¡Algún consejo sobre cómo analizar los valores de 'respuestas' cuando no son nulos para una serie de objetos muy apreciados!
Solo un pensamiento, ¿ha intentado simplemente iterar los results y actualizar la propiedad de answers sin una Promesa?:
db.query(query, [req.query['product_id'], req.query['count']], (error, results) => { if (error) { console.log('err err ', error); } if (!results[0]) { res.json('No questions found') } else { console.log(results) results.forEach(result => { result.forEach((obj) => { obj.answers = JSON.parse(obj.answers); }); }); res.json(results.splice(0, req.query['count'])); } });