将 JSON 转换为元素树 [关闭]

Posted

技术标签:

【中文标题】将 JSON 转换为元素树 [关闭]【英文标题】:Convert JSON to Elements tree [closed] 【发布时间】:2021-07-21 05:54:15 【问题描述】:

我想将 JSON(对象文字)转换为元素树 html。 我还想支持自定义data-* 属性,例如:data-exampledata-link 等。

我的 JSON 示例:

"<>":"div","content":["hello","<>":"span","content":["Hello"],"attrs":"class":"color-red"],"attrs":"class":"flex"

现在这是我期望的输出:

<div class='flex'>hello<span class='color-red'>Hello</span></div>

我不知道从哪里开始解决这个问题......

【问题讨论】:

你能展示你尝试了什么吗?请阅读 How to Ask 和 edit 以及 minimal reproducible example 的最佳代码,以表达您迄今为止所做的研究。 【参考方案1】:

JSON 到 HTML 元素树

基本上,关键是使用递归函数。

稍微修改您的初始 JSON 以删除像 "&lt;&gt;" 这样的奇怪属性,而改用 "tag"。 创建两个辅助函数 newELnewTN 以相应地生成具有属性或文本节点的新元素 创建一个递归函数JSON2DF,它将您的JSON(或对象)数据解析到DocumentFragment容器中,以后可以在任何需要的地方使用appended。 如果迭代对象具有 content 数组 - 递归调用 JSON2DOM 在数组中的每个元素上

const newTN = (text) => document.createTextNode(text);
const newEL = (tag, attr) => 
  const EL = document.createElement(tag);
  if (attr) Object.entries(attr).forEach(([k,v]) => EL.setAttribute(k, v));
  return EL;
;

const JSON2DF = (data, PAR = new DocumentFragment()) => 
  const CH = typeof data === "string" ? newTN(data) : newEL(data.tag, data.attr)
  if (data.content) data.content.forEach(d => JSON2DF(d, CH)); // Recursion!
  PAR.append(CH);
  return PAR;
;

const data = 
  tag: "DIV",
  attr:  class: "flex" ,
  content: [
    "Some DIV text",
    
      tag: "SPAN",
      attr:  class: "color-red", "data-test": "test" ,
      content: [
        "Some span text",
      ],
    
  ],
;

document.body.append(JSON2DF(data));
.color-red  color: red; 

结果如预期:

<div class="flex">
  Some DIV text<span class="color-red">Some span text</span>
</div>

【讨论】:

感谢您的帮助,祝您成功:) 您的代码可以工作,但 (data-example, data-link) 等属性不支持:( @SalarIzadi 在这种情况下,您可以扩展 newEL 函数以解释 "data-*" 并在该新元素的 forEach 循环中使用 EL.setAttribute @SalarIzadi 编辑了代码并修复以支持自定义 data-* 属性。当使用属性而不是节点属性时 - 像最初一样使用"class"(而不是"className")。 谢谢兄弟帮了我​​这么多。祝你成功:)

以上是关于将 JSON 转换为元素树 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

将 JSON 数组转换为 <ul> 和 <li> 元素

将每个具有一个对象的 JSON 对象数组转换为 JSON 对象数组 [关闭]

如何将 JSON 树结构转换/转换为 merkle 树

将nltk树转换为JSON表示

将 csv 转换为 JSON 树结构?

将 JSON 类别树转换为数据库表