【问题标题】:Create nested Json data according Html structure根据 Html 结构创建嵌套的 Json 数据
【发布时间】:2019-05-22 06:18:12
【问题描述】:

我正在开发一个自定义 Jquery 查询构建器,我已经完成了包含所有字段和嵌套元素的 UI 部分,现在我在以 Json 格式以相同的嵌套方式导出数据时遇到了困难(继承了我在 HTML 中的做法)。

例如我的 HTML 代码是

<div class="query">
  <input type="text" value="Field 1">
    <div class="query">
      <input type="text" value="Field 2">
      <div class="query">
        <input type="text" value="Field 3">
      </div>
   </div>
   <div class="query">
      <input type="text" value="Field 4">
   </div>
</div>

需要以 Json 格式输出为

     {
   "rules":[
      {
         "field":"field 1"
      },
      {
         "rules":[
            {
               "field":"field 2"
            },
            {
               "rules":[
                  {
                     "field":"field 3"
                  }
               ]
            }
         ]
      },
      {
         "rules":[
            {
               "field":"field 4"
            }
         ]
      }
   ]
}

如何在 Jquery 中创建所需的 Json 数据?

【问题讨论】:

  • 请尝试一下,然后告诉我们您遇到了什么问题

标签: jquery json dynamic


【解决方案1】:

你可以用递归函数来做到这一点:

function build($query) {
    return {
        rules: $.map($query.children("input, .query"), function (item) {
            return $(item).is("input") ? { field: $(item).val() } : build($(item));
        })
    };
}

const result = build($(".query:first"));

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="query">
    <input type="text" value="Field 1">
    <div class="ignorethis">
        <input type="text" value="Field to ignore">
    </div>
    <div class="query">
        <input type="text" value="Field 2">
        <div class="query">
            <input type="text" value="Field 3">
        </div>
    </div>
    <div class="query">
        <input type="text" value="Field 4">
    </div>
</div>

【讨论】:

  • 感谢 Trincot 的快速响应,只是想知道在 Html 结构之间是否还有其他类,例如
    ... . 那么我们如何忽略具有一致类的元素,使其不被视为另一个嵌套元素。
  • 您可以在children 方法调用中添加过滤器。我更新了 sn-p 添加了这样一个过滤器。
猜你喜欢
相关资源
最近更新 更多
热门标签