将 JSON 数组对象附加到 formdata

Posted

技术标签:

【中文标题】将 JSON 数组对象附加到 formdata【英文标题】:Appending JSON array object to formdata 【发布时间】:2020-12-03 18:17:18 【问题描述】:

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

var contacts = [];

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

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

现在我想将此添加到表单数据中的“联系人”名称中。为此我使用:

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 接受联系人集合以及姓名、年龄和联系人等其他字段。

【问题讨论】:

您似乎没有按照 API 的预期发送数据,但您没有向我们提供有关您的 API 接受什么的任何详细信息。此外,您已经证明您的 formdata 对象包含您需要的所有信息,因此它可能不是问题的根源。 现在将添加参考。谢谢:) 提示:console.log() 而不是 alert() @tadman 为什么?它似乎显示了正确的数据? 什么“API”?你需要告诉我们更多关于它在做什么、它期望什么,以及最重要的是,你是如何发送这个的。 【参考方案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`);
&lt;script src="https://unpkg.com/json-form-data@^1.7.0/dist/jsonToFormData.min.js"&gt;&lt;/script&gt;

【讨论】:

@Neo 请注意,我在初始实现中修复了一个错误 谢谢伙计。但我只是担心为什么标准的代码实践对我不起作用:( 我不明白这个问题,它不起作用,因为您的 API 不支持联系人数据的 JSON,它需要这种表单数据编码样式。请注意,有一个包可以为您做到这一点npmjs.com/package/json-form-data

以上是关于将 JSON 数组对象附加到 formdata的主要内容,如果未能解决你的问题,请参考以下文章

使用 NodeJS 将新对象附加到 DynamoDB 中的 JSON 数组

将对象附加到变量

将 JSON 数组附加到字符串数组

使用 postgres 9.4 将 JSON 元素附加到数组

Python - 将 JSON 对象传递给函数时附加到 JSON 对象的附加“成员”

如何出于 JSON 原因将元素附加到 C# 数组?