Estoy tratando de convertir una cadena CSV en una matriz de una matriz de objetos. Aunque el problema es que hay un montón de \n en el cuerpo de la solicitud entrante, lo que hace que la solicitud se divida y arruine todo el código. Estoy intentando arreglar esto incluso con \n en el cuerpo
La cadena se ve así, todos los mensajes que son cadenas de la solicitud entrante, comienzan con \" y terminan con \" .
"id,urn,title,body,risk,s.0.id,s.1.id,s.2.id,a.0.id,a.1.id,a.2.id,a.3.id 302,25,\"Secure Data\",\"Banking can save a lot of time but it's not without risks. Scammers treat your bank account as a golden target – it can be a quick and untraceable way to get money from you\n\n**TOP TIPS**\n\n**Always read your banks rules.** These tips don't replace your banks rules - \ in fact we fully support them. If you don't follow their rules, you may not get your money back if you are defrauded \n\n**Saving passwords or allowing auto-complete.** Saving passwords in your browser is great for remembering them but if a hacker is able to access your computer, they will also have access to your passwords. When on your banking site the password box we recommend you don't enable the auto-complete function – a hacked device means they are able to gain access using this method \n\n**Use a PIN number on your device.** It's really important to lock your device when you're not using it.\",,2,20,52,1,2,3,4" Intenté hacerlo más pequeño ya que hay un montón de contenido, pero la cadena que viene es básicamente la anterior. La cadena grande que está arruinando mi código comienza en Banking can save y termina not using it. Tengo varios otros datos que tienen el mismo tipo de cuerpo y siempre vienen dentro de \" body \" . He estado intentando realizar una función para separar el contenido de esta cadena CSV, en una matriz de matriz o una matriz de objetos. .
Esto es lo que intenté:
function csv_To_Array(str, delimiter = ",") { const header_cols = str.slice(0, str.indexOf("\n")).split(delimiter); const row_data = str.slice(str.indexOf("\n") + 1).split("\n"); const arr = row_data.map(function (row) { const values = row.split(delimiter); const el = header_cols.reduce(function (object, header, index) { object[header] = values[index]; return object; }, {}); return el; }); // return the array return arr; }También pensé en usar expresiones regulares, donde dividiría si tuviera una coma de \n, aunque si hay una /" se dividirá cuando encuentre la siguiente /":
array.split(/,/\n(?!\d)/))Prueba esto:
csvData.replace(/(\r\n|\n|\r)/gm, "");Una vez que haya usado eso para reemplazar las nuevas líneas, o las eliminó, este código lo ayudará a comenzar a comprender cómo crear una matriz a partir de la nueva cadena CSV:
const splitTheArrayAndLogIt = () => { const everySingleCharacter = csvData.split(""); // <-- this is a new array console.log(everySingleCharacter); const splitAtCommas = csvData.split(","); console.log(splitAtCommas); }