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

json_decode解析前端传入的JSON字符串数组为何返回字符串而非数组

问题原因

核心问题是JSON序列化重复执行了两次:
你前端已经手动对数组执行了JSON.stringify(jsonArray)得到JSON字符串,但你调用的newFile方法内部默认会对传入的参数再次做JSON序列化处理,最终传到后端的请求体是两层序列化后的结果。
后端第一次执行json_decode后,得到的是你第一次序列化生成的字符串,而不是原始数组,这就是你日志里看到转义JSON串的原因。

验证方式

在后端控制器中打印原始请求体内容即可确认:

// 新增这行日志打印原始请求内容
$this->logger->info("Raw request content: " . $request->getContent());

如果输出的内容外层多了一层引号,形如"[\"String1\",\"String2\"]",就可以确认是重复序列化导致的问题。

解决方案

两种方案二选一即可:

  • 前端去掉手动序列化逻辑,直接把原始数组传给newFile,交给方法内部处理序列化:
var jsonArray = ["String1", "String2"]
await newFile(jsonArray);
  • 后端多执行一次JSON解析,得到原始数组:
$requestData = json_decode($request->getContent(), true); 
// 对第一次解析得到的字符串再做一次解析
$realArray = json_decode($requestData, true);
$this->logger->info("File request data is ", [ $realArray ]);
本地测试正常的原因

你本地PHP测试时只对数组做了一次json_encode、一次json_decode,没有重复序列化的步骤,所以结果符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:36:05