javascript - 如何修复对象 JSON 的错误数组?

标签 javascript jquery json

我无法在 JSON 中创建对象数组。当我单击出现在 JSON 上的保存按钮 (#btnSave) 时,显示如下。我想要的是我创建的一个表单,特别是使用 TAG4 名称创建的表单,该名称具有 div 类名称“toAdd”,可以按照我的需要在下面进行分组。那么如何解决呢?

我的数据:

{
  "TAG1_ID": "1",
  "TAG2_ID": "2",
  "TAG3_ID": "3",
  "TAG4_NAME": [
    "Me",
    "You"
  ],
  "TAG4_AGE": [
    "20",
    "22",
    "17",
    "4"
  ],
  "TAG4_JOB": [
    "Police",
    "Fireman",
    "Student",
    "Baby"
  ]
}

我想这样创建:

{
  "TAG1_ID": "1",
  "TAG2_ID": "2",
  "TAG3_ID": "3",
  "temp": [
    {
      "TAG4_NAME": "Me",
      "detail_temp": [
        {
          "TAG4_AGE": "20",
          "TAG4_JOB": "Police"
        },
        {
          "TAG4_AGE": "22",
          "TAG4_JOB": "Fireman"
        }
      ],
    },
    {
      "TAG4_NAME": "You",
      "detail_temp": [
        {
          "TAG4_AGE": "17",
          "TAG4_JOB": "Student"
        },
        {
          "TAG4_AGE": "4",
          "TAG4_JOB": "Baby"
        }
      ],
    }
  ]
}

Javascript:

function saveForm(){
          var array = []; 
          var object = {};
          var serialArray = $('.ltktForm').serializeArray();
          /* var serialArray = $('.ltktForm'); 
          var data = JSON.stringify(serialArray.serializeArray()); */
          $.each(serialArray, function(){
           if(object[this.name]){
            if(!object[this.name].push){
                object[this.name] = [object[this.name]];
            }
            object[this.name].push(this.value || '');
           }else{
               object[this.name] = this.value || '';
           }
          });
          return object;
    } 

    $('#btnSave').on('click', function () {
            var data = saveForm();
            console.log(JSON.stringify(data));atas));

        });

我的表单:

<form class="form form-horizontal myForm" novalidate method="POST">
        <div class="tabNavigator">
            <ul class="nav nav-tabs" role="tablist">
                <li role="presentation" class="active">
                    <a id="id1" href="#idOne" class="tab_trigger" aria-controls="home" role="tab" data-toggle="tab">ID_1</a>
                </li>
                <li role="presentation" class="active">
                    <a id="id2" href="#idTwo" class="tab_trigger" aria-controls="home" role="tab" data-toggle="tab">ID_2</a>
                </li>
                <li role="presentation" class="active">
                    <a id="id3" href="#idThree" class="tab_trigger" aria-controls="home" role="tab" data-toggle="tab">ID_3</a>
                </li>
            </ul><br>

            <!-- I ID_1 I -->

            <div class="tab-content">
                <div role="tabpanel" class="tabcontent tab-pane active" id="idOne">
                    <fieldset>
                        <legend>ID_1</legend>
                        <div class="form-group ">
                            <label class="col-sm-2 control-label">Input ID 1</label>
                            <div class="col-sm-9">
                                <input class="form-control" type="text" name="TAG1_ID" />
                            </div>
                        </div>
                    </fieldset>
                </div>

                <!-- II ID_2 II -->
                <div role="tabpanel" class="tabcontent tab-pane active" id="idTwo">
                    <fieldset>
                        <legend>ID_2</legend>
                        <div class="form-group ">
                            <label class="col-sm-2 control-label">Input ID 2</label>
                            <div class="col-sm-9">
                                <input class="form-control" type="text" name="TAG2_ID" />
                            </div>
                        </div>
                    </fieldset>
                </div>


                <!-- III ID_3 III -->
                <div role="tabpanel" class="tabcontent tab-pane active" id="idThree">
                    <fieldset>
                        <legend>ID_3</legend>
                        <div class="form-group ">
                            <label class="col-sm-2 control-label">Input ID 3</label>
                            <div class="col-sm-9">
                                <input class="form-control" type="text" name="TAG3_ID" />
                            </div>
                        </div>
                    </fieldset>
                    <div class="toAdd">
                        <fieldset>
                            <legend>Temp</legend>
                            <div class="form-group">
                                <label class="col-sm-2 control-label">Input Name</label>
                                <div class="col-sm-9">
                                    <input class="form-control" type="text" name="TAG4_NAME" />
                                </div>
                            </div>
                            <div class="form-group ">
                                <label class="col-sm-2 control-label">Input Age</label>
                                <div class="col-sm-9">
                                    <input class="form-control" type="text" name="TAG4_AGE" />
                                </div>
                            </div>
                            <div class="form-group ">
                                <label class="col-sm-2 control-label">Input Job</label>
                                <div class="col-sm-9">
                                    <input class="form-control" type="text" name="TAG4_JOB" />
                                </div>
                            </div>
                        </fieldset>
                    </div>
                    <button class="addForm btn btn-primary" type="button">+</button>
                </div>
            </div>
</form>

<script>

$(document).ready(function() {
    var toAdd = 
                '<fieldset>'+
                        '<legend>Temp</legend>'+
                        '<div class="form-group">'+
                            '<label class="col-sm-2 control-label">Input Name</label>'+
                            '<div class="col-sm-9">'+
                                '<input class="form-control" type="text" name="TAG4_NAME" />'+
                            '</div>'+
                        '</div>'+
                        '<div class="form-group ">'+
                            '<label class="col-sm-2 control-label">Input Age</label>'+
                            '<div class="col-sm-9">'+
                                '<input class="form-control" type="text" name="TAG4_AGE" />'+
                            '</div>'+
                        '</div>'+
                        '<div class="form-group ">'+
                            '<label class="col-sm-2 control-label">Input Job</label>'+
                            '<div class="col-sm-9">'+
                                '<input class="form-control" type="text" name="TAG4_JOB" />'+
                            '</div>'+
                        '</div>'+
                    '</fieldset>';

    $('.addForm').on('click', function(){
        $(this).parent().find('div.toAdd').append(
                toAdd
            );
    });

    });
</script>

最佳答案

你必须像这样手动构造数组:

$(function() {
  var toAdd = '<fieldset>' + '<legend>Temp</legend>' + '<div class="form-group">' + '<label class="col-sm-2 control-label">Input Name</label>' + '<div class="col-sm-9">' + '<input class="form-control" type="text" name="TAG4_NAME" />' + '</div>' + '</div>' + '<div class="form-group ">' + '<label class="col-sm-2 control-label">Input Age</label>' + '<div class="col-sm-9">' + '<input class="form-control" type="text" name="TAG4_AGE" />' + '</div>' + '</div>' + '<div class="form-group ">' + '<label class="col-sm-2 control-label">Input Job</label>' + '<div class="col-sm-9">' + '<input class="form-control" type="text" name="TAG4_JOB" />' + '</div>' + '</div>' + '</fieldset>';

  $('.addForm').on('click', function() {
    $(this).parent().find('div.toAdd').append(toAdd);
  });

  $('#btnSave').on('click', function() {
    var result = {};

    //Get the value of tag1, tag2, tag3
    result.TAG1_ID = $("input[name='TAG1_ID']").val();
    result.TAG2_ID = $("input[name='TAG2_ID']").val();
    result.TAG3_ID = $("input[name='TAG3_ID']").val();
    //You can add more input tags here <--
    

    var temp = {};
    //Loop thru tag4 divs
    //Loop thru fieldsets and get each value
    $(".toAdd fieldset").each(function() {
      var name = $(this).find("input[name='TAG4_NAME']").val();
      var age = $(this).find("input[name='TAG4_AGE']").val();
      var job = $(this).find("input[name='TAG4_JOB']").val();

      temp[name] = temp[name] || {
        TAG4_NAME: name,
        detail_temp: []
      }
      temp[name]["detail_temp"].push({
        TAG4_AGE: age,
        TAG4_JOB: job
      });
    });

    result.temp = Object.values(temp).map(v => v);

    console.log(result);

  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form class="form form-horizontal myForm" novalidate method="POST">
  <div class="tabNavigator">
    <ul class="nav nav-tabs" role="tablist">
      <li role="presentation" class="active">
        <a id="id1" href="#idOne" class="tab_trigger" aria-controls="home" role="tab" data-toggle="tab">ID_1</a>
      </li>
      <li role="presentation" class="active">
        <a id="id2" href="#idTwo" class="tab_trigger" aria-controls="home" role="tab" data-toggle="tab">ID_2</a>
      </li>
      <li role="presentation" class="active">
        <a id="id3" href="#idThree" class="tab_trigger" aria-controls="home" role="tab" data-toggle="tab">ID_3</a>
      </li>
    </ul>
    <br>

    <!-- I ID_1 I -->

    <div class="tab-content">
      <div role="tabpanel" class="tabcontent tab-pane active" id="id1">
        <fieldset>
          <legend>ID_1</legend>
          <div class="form-group ">
            <label class="col-sm-2 control-label">Input ID 1</label>
            <div class="col-sm-9">
              <input class="form-control" type="text" name="TAG1_ID" />
            </div>
          </div>
        </fieldset>
      </div>

      <!-- II ID_2 II -->
      <div role="tabpanel" class="tabcontent tab-pane active" id="id2">
        <fieldset>
          <legend>ID_2</legend>
          <div class="form-group ">
            <label class="col-sm-2 control-label">Input ID 2</label>
            <div class="col-sm-9">
              <input class="form-control" type="text" name="TAG2_ID" />
            </div>
          </div>
        </fieldset>
      </div>


      <!-- III ID_3 III -->
      <div role="tabpanel" class="tabcontent tab-pane active" id="id3">
        <fieldset>
          <legend>ID_3</legend>
          <div class="form-group ">
            <label class="col-sm-2 control-label">Input ID 3</label>
            <div class="col-sm-9">
              <input class="form-control" type="text" name="TAG3_ID" />
            </div>
          </div>
        </fieldset>
        <div class="toAdd">
          <fieldset>
            <legend>Temp</legend>
            <div class="form-group">
              <label class="col-sm-2 control-label">Input Name</label>
              <div class="col-sm-9">
                <input class="form-control" type="text" name="TAG4_NAME" />
              </div>
            </div>
            <div class="form-group ">
              <label class="col-sm-2 control-label">Input Age</label>
              <div class="col-sm-9">
                <input class="form-control" type="text" name="TAG4_AGE" />
              </div>
            </div>
            <div class="form-group ">
              <label class="col-sm-2 control-label">Input Job</label>
              <div class="col-sm-9">
                <input class="form-control" type="text" name="TAG4_JOB" />
              </div>
            </div>
          </fieldset>
        </div>
        <button class="addForm btn btn-primary" type="button">+</button>
        <button class="btn btn-primary" type="button" id='btnSave'>SAVE</button>

      </div>
    </div>
</form>

关于javascript - 如何修复对象 JSON 的错误数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48940527/

相关文章:

javascript - postMessage 在 IE11 上仍然损坏?

php - 如何使用 jquery 验证器插件验证多个输入类型文件

javascript - 当我按下按钮时,如何运行这个解析远程 json 的函数?

c# - 使用 newton json 在 c# 中从反序列化的 json 转换错误

javascript - 如何在不丢失 javascript 结构的情况下过滤嵌套树对象?

java - Gson序列化取决于字段值

javascript - 当数量等于 1 时禁用减号按钮。

javascript - 将下拉列表更改为其原始状态

javascript - 在文本输入区域创建双向更新

jQuery 验证和分组 - 当第二个字段值正确时无法正常工作?