将JSON数组对象追加到formdata

时间:2020-08-13 20:43:39

标签: javascript jquery json api

我有一个称为联系人的JSON数组对象:

var contacts = [];

经过一些处理,contacts的值如下所示:

[{ "Country":"country 1", "Phone":"123" },{ "Country":"country 2", "Phone":"456" }]

现在,我要将其添加到formdata中的“联系人”名称中。为此,我使用:

var formdata = new FormData();
formdata.append("Contacts", JSON.stringify(contacts));

当我在按钮上尝试alert(JSON.stringify(formdata));时,我得到:

\"Contacts\":\"[{\\\"Country\\\":\\\"country 1\\\",\\\"Phone\\\":\\\"123\\\"},
{\\\"Country\\\":\\\"country 2\\\",\\\"Phone\\\":\\\"456\\\"}]\"}"

问题在于,在API中,它没有检测到联系人列表。 我尝试将POSTMAN用作:

Contacts[0].Country : country 1
Contacts[0].Phone : 123
Contacts[1].Country : country 2
Contacts[1].Phone : 456

在这种情况下,

API接受数据。 API接受除此以外的其余formdata字段,只是共享此信息以排除api的问题。

API接受联系人以及其他字段(例如姓名,年龄和联系人)的集合。

1 个答案:

答案 0 :(得分:1)

如果您的API接受该格式的数据,则无法将其作为JSON发送,则需要为您提到的每一行创建一个单独的FormData条目。

例如

const contacts = [{ "Country":"country 1", "Phone":"123" },{ "Country":"country 2", "Phone":"456" }];


var formdata = new FormData();

// This could be made fancier but it explains how to fix the problem
for (let i=0; i < contacts.length; i++) {
   formdata.append(`Contacts[${i}].Country`, contacts[i].Country);
   formdata.append(`Contacts[${i}].Phone`, contacts[i].Phone);
}

请注意,json-form-data会为您完成

const data = {
  Contacts: [{
    "Country": "country 1",
    "Phone": "123"
  }, {
    "Country": "country 2",
    "Phone": "456"
  }]
};

const formData = jsonToFormData(data);
for (const [key,value] of formData.entries()) {
    console.log(`${key}: ${value}`);
}
<script src="https://unpkg.com/json-form-data@^1.7.0/dist/jsonToFormData.min.js"></script>