将数组输出包裹在大括号中并添加相关数据标签

Wrap array output in curly brackets and add relevant data label

我正在尝试创建 API 连接并需要将 html 表单数据输出为 JSON 数组。但是我当前的输出与 API 文档不匹配。

我已经设法将表单数据输出为 JSON 友好格式,但试图匹配文档格式给我带来了麻烦。这是文档的 link:https://developer.infusionsoft.com/docs/rest/#!/Contact/createContactUsingPOST

const isEmail = element => element.type === 'email';

const formToJSON = elements => [].reduce.call(elements, (data, element) => {

  if (isValidElement(element) && isValidValue(element)) {

    if (isEmail(element)) {
      data[element.name] = (data[element.name] || []).concat(element.value);
    } else {
      data[element.name] = element.value;
    }
  }

  return data;
}, {});

const handleFormSubmit = event => {

  event.preventDefault();
  const data = formToJSON(form.elements);
  dataContainer.textContent = JSON.stringify(data, null, "  ");

};

const form = document.getElementsByClassName('contact-form')[0];
form.addEventListener('submit', handleFormSubmit);
<form class="contact-form">
  <input type="email" placeholder="Email" name="email_addresses" required="required">
  <input type="submit" placeholder="submit" value="submit" name="submit">
</form>

电子邮件字段的当前输出

  "email_addresses": [
    "test@test.com"
  ],

输出应该是什么样的。

"email_addresses": [
    {
      "email": "string",
      "field": "EMAIL1"
    }
  ],

@Tom 在我试过的评论中发布了一个答案。

data[element.name] = []; var item = {"email": undefined,"field": "EMAIL1"};
item.email = (data[element.name] || []).concat(element.value);
data[element.name].push(item);

结果如下输出

"email_addresses": [
    {
      "email": [
        "test@test.com"
      ],
      "field": "EMAIL1"
    }
  ],

删除 (data[element.name] || []).concat 会导致预期输出:

"email_addresses": [
    {
      "email": "test@test.com",
      "field": "EMAIL1"
    }
  ],