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
相关产品推荐
相关产品推荐

