Анализировать объекты json, разделенные строками, в таблице html

Я не могу изменить формат json. Хранилище данных в новой строке. JSON-файл:

{"ProgMode":"on","wait_h":"5","wait_m":"5","output":"1"}
{"ProgMode":"off","wait_h":"10","wait_m":"10","output":"2"}

Я использую приведенный ниже код, но без скобок ([]) в файле json, это не работает.

    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();

Итак, как я могу разобрать json, который хранится с новыми строками, без запятых и скобок?

🤔 А знаете ли вы, что...
JavaScript позволяет создавать асинхронные запросы к серверу с помощью технологии AJAX.


1
44
2

Ответы:

Вы можете разделить входной текст на строки, а затем «JSON.parse» одну строку.

let myObj = this.responseText.split('\n')
  .filter(line => line !== "")
  .map(JSON.parse);

Пример на основе вашей строки:

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.info(myObj)

Решено

вам не нужно разбивать и отображать, это тяжело для этого случая, попробуйте это

var myObj = JSON.parse(`[${this.responseText.replaceAll("}\n","},")}]`);

это немного сложнее, но гораздо надежнее, так как не использует никаких специальных символов

var myObj = JSON.parse(`[{${this.responseText.substring(1).replaceAll("{",",{")}]`);