No puedo cambiar el formato json. El almacén de datos en una nueva línea. archivo json:
{"ProgMode":"on","wait_h":"5","wait_m":"5","output":"1"} {"ProgMode":"off","wait_h":"10","wait_m":"10","output":"2"}
Uso el código siguiente pero sin corchetes ([]) en el archivo json, no funciona.
var ReqJson = new XMLHttpRequest(); function response(){ if(this.readyState == 4 && this.status == 200){ var myObj = JSON.parse(this.responseText); const dbParam = JSON.stringify({table:"ProgramView",limit:20}); let text = "<table class='table my-0'>" for (let x in myObj) { text += '<tr><td>' + myObj[x].wait_h + ':' + myObj[x].wait_m + ':' + myObj[x].output + '</td></tr>'; } text += "</table>" document.getElementById("dynamic_table").innerHTML = text; } } function ProccessConfig(){ ReqJson.open("POST", "Programs.json", true); ReqJson.onreadystatechange = response; ReqJson.send() } ProccessConfig();
Entonces, ¿cómo puedo analizar json que está almacenado con nuevas líneas y sin comas ni corchetes?
Puede dividir el texto de entrada en filas y luego 'JSON.parse' la fila única.
let myObj = this.responseText.split('\n') .filter(line => line !== "") .map(JSON.parse);
Ejemplo basado en su cadena:
let text = `{"ProgMode":"on","wait_h":"5","wait_m":"5","output":"1"} {"ProgMode":"off","wait_h":"10","wait_m":"10","output":"2"} ` let myObj = text.split('\n') .filter(line => line !== "") .map(JSON.parse); console.log(myObj)
no necesita dividir y mapear, es demasiado pesado para este caso, intente esto
var myObj = JSON.parse(`[${this.responseText.replaceAll("}\n","},")}]`);
esto es un poco más complicado, pero mucho más confiable, ya que no usa ningún símbolo especial
var myObj = JSON.parse(`[{${this.responseText.substring(1).replaceAll("{",",{")}]`);