The_Lars
@The_Lars

Создать JSON на основе данных из HTML?

Пример HTML

<ul class="menu">
    <li>Top_1
        <ul>
            <li>Sub_1</li>
            <li>Sub_2</li>
            <li>Sub_3
            <ul>
                <li>Sub_sub_1</li>
                <li>Sub_sub_2</li>
            </ul>
            </li>
        </ul>
    </li>

    <li>Top_2
        <ul>
            <li>Sub_1</li>
            <li>Sub_2</li>
            <li>Sub_3
                <ul>
                    <li>Sub_sub_1</li>
                    <li>Sub_sub_2</li>
                </ul>
            </li>
        </ul>
    </li>
</ul>



Нужно как-то преобразовать это в многомерный json используя JS. Помогите, пожалуйста.
  • Вопрос задан
  • 318 просмотров
Решения вопроса 2
yarkov
@yarkov Куратор тега JavaScript
Помог ответ? Отметь решением.
Сойдет такое?
https://jsfiddle.net/yarkov_aleksei/x1dnfa3b/
function toJSON(node) {
  node = node || this;
  var obj = {
    nodeType: node.nodeType
  };
  if (node.tagName) {
    obj.tagName = node.tagName.toLowerCase();
  } else
  if (node.nodeName) {
    obj.nodeName = node.nodeName;
  }
  if (node.nodeValue) {
    obj.nodeValue = node.nodeValue;
  }
  var attrs = node.attributes;
  if (attrs) {
    var length = attrs.length;
    var arr = obj.attributes = new Array(length);
    for (var i = 0; i < length; i++) {
      attr = attrs[i];
      arr[i] = [attr.nodeName, attr.nodeValue];
    }
  }
  var childNodes = node.childNodes;
  if (childNodes) {
    length = childNodes.length;
    arr = obj.childNodes = new Array(length);
    for (i = 0; i < length; i++) {
      arr[i] = toJSON(childNodes[i]);
    }
  }
  return obj;
}

console.log(toJSON(document.querySelector('.menu')))

https://gist.github.com/sstur/7379870
Ответ написан
Комментировать
0xD34F
@0xD34F Куратор тега JavaScript
const parseUL = ul => ul
  ? Array.from(ul.children, n => ({
      text: (([...n.childNodes].find(n => n.nodeType === 3) || {}).textContent || '').trim(),
      children: parseUL(n.querySelector('ul')),
    }))
  : [];


const data = parseUL(document.querySelector('.menu'));
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы