You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native中通过x-www-form-urlencoded发送对象数组问题

解决React Native中x-www-form-urlencoded格式发送对象数组的问题

你的问题核心在于直接把对象赋值给data["array[]"]后,encodeURIComponent会默认把对象转成[object Object]字符串,后端自然没法解析成有效数据。下面给你两种实用的解决方案:

方案一:将对象序列化为JSON字符串后发送

这种方式简单直接,适合对象结构复杂的场景,后端拿到数据后只需反序列化即可:

// 遍历数组,把每个对象转为JSON字符串
global.modifiedOffline.forEach((elem) => {
  data["array[]"] = JSON.stringify(elem);
});

// 生成formBody的逻辑保持不变
const formBody = Object.keys(data).map(key => 
  encodeURIComponent(key) + '=' + encodeURIComponent(data[key])
).join('&');

// 发送请求时务必设置正确的请求头
fetch('你的接口地址', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
  },
  body: formBody,
})
.then(res => res.json())
.catch(err => console.error('请求出错:', err));

后端接收后,只需要把array[]数组中的每个JSON字符串解析成对象就能正常使用。

方案二:按form表单嵌套格式展开对象属性

如果你的后端框架支持自动解析嵌套form数据(比如Spring Boot、Express的相关中间件),可以把每个对象的属性拆分成array[索引].属性名的格式,让后端直接绑定到对象数组:

let index = 0;
global.modifiedOffline.forEach((elem) => {
  // 遍历对象的每个键值对,生成嵌套的form字段键
  Object.keys(elem).forEach(key => {
    data[`array[${index}].${key}`] = elem[key];
  });
  index++;
});

// 生成formBody并发送请求
const formBody = Object.keys(data).map(key => 
  encodeURIComponent(key) + '=' + encodeURIComponent(data[key])
).join('&');

fetch('你的接口地址', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
  },
  body: formBody,
})
.then(res => res.json())
.catch(err => console.error('请求出错:', err));

这种方式完全符合form表单的标准提交格式,后端不需要额外处理JSON解析,就能直接拿到可用的对象数组。

你可以根据后端的处理能力选择合适的方案,方案二更贴合传统form提交逻辑,方案一则适合快速处理结构复杂的对象。

内容的提问来源于stack exchange,提问作者titus bocioc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:15:55