Как я могу преобразовать HTML код в JSON объект? - PullRequest
1 голос
/ 29 февраля 2020

Я создаю Angular 7 приложение. В этом приложении я разрешаю пользователям редактировать HTML, который затем хочу преобразовать в JSON, чтобы сохранить его таким образом, который имеет смысл.

Короче говоря, я хочу взять любой код HTML и обработать его в JSON объект. Как я могу это сделать?

Ответы [ 2 ]

3 голосов
/ 29 февраля 2020

Я бы проанализировал HTML в DOM (вы можете сделать это на стороне клиента или на стороне сервера), а затем сериализовал аспекты DOM, которые мне не безразличны, для объекта, который я затем использовал бы JSON.stringify включено (если вы действительно хотите JSON).

Например:

function converter(dom) {
    if (dom.nodeType === Node.TEXT_NODE) {
        return dom.nodeValue;
    }
    if (dom.nodeType === Node.DOCUMENT_NODE) {
        dom = dom.documentElement;
    }
    const obj = {};
    obj.nodeType = dom.nodeType;
    if (dom.nodeType === Node.ELEMENT_NODE) {
        obj.tagName = dom.tagName;
        obj.attributes = []; // Array.from(obj.attributes) gives us a lot of things we don't want
        for (let i = 0, len = dom.attributes.length; i < len; ++i) {
            const attr = dom.attributes[i];
            obj.attributes.push({name: attr.name, value: attr.value});
        }
        obj.children = [];
        for (let child = dom.firstChild; child; child = child.nextSibling) {
            obj.children.push(converter(child));
        }
    } else {
        obj.nodeValue = dom.nodeValue;
    }
    return obj;
}
const json = JSON.stringify(converter(document.getElementById("example")), null, 4);
console.log(json);
.as-console-wrapper {
    max-height: 100% !important;
}
<div id="example" class="ex">
  <span>Span 1</span>
  <span>Span 2</span>
  <!-- comment -->
  <span>
    Span 3
    <span>Inner span</span>
  </span>
</div>

Очевидно, что это всего лишь грубый набросок, а не полностью обожженное решение.

0 голосов
/ 29 февраля 2020

Если вы хотите просто добавить его в json запрос на отправку на внешний сервер, вы можете сделать что-то вроде этого:

{
    "html": "<html>...</html>"
}

и отправить его на сервер для дальнейшей обработки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...