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

Laravel使用Storage::put存储JSON数组报错:数组转字符串转换

解决Laravel Storage::put 数组转字符串错误问题

Hey there! I see exactly where the problem is. Let's break it down:

问题原因

Laravel的Storage::put()方法需要接收字符串类型的内容来写入文件。你已经成功把JSON字符串解码成了PHP数组$test并修改了数据,但直接把这个数组传给put()方法时,Laravel无法自动将数组转换为字符串,所以抛出了Array to string conversion错误。

而你之前不解码直接存储成功,是因为$data本身就是已经格式化好的JSON字符串,完全符合put()方法的参数要求。

解决方案

修改完数组内容后,只需要用json_encode()把PHP数组重新转换回JSON字符串,再传给put()方法就可以解决这个问题了。

修正后的代码

$data = '[ { "label": " Total Accidents", "color": "#5ab1ef", "data": [ ["Jan",0], ["Feb",0], ["Mar",0], ["Apr",0], ["May",0], ["Jun",0], ["Jul",0], ["Aug",0], ["Sep",0] ] }, { "label": " Active Experts", "color": "#f5994e", "data": [ ["Jan",0], ["Feb",0], ["Mar",0], ["Apr",0], ["May",0], ["Jun",0], ["Jul",0], ["Aug",0], ["Sep",0] ] }, { "label": " Pending Payments", "color": "#d87a80", "data": [ ["Jan",0], ["Feb",0], ["Mar",0], ["Apr",0], ["May",0], ["Jun",0], ["Jul",0], ["Aug",0], ["Sep",0] ] } ]';

$test = json_decode($data, true);
// 修改目标月度数据
$test[0]['data'][1] = ["Jan", 153];

// 关键步骤:把修改后的数组转回JSON字符串
// JSON_PRETTY_PRINT是可选参数,能让生成的JSON更易读,方便后续查看文件内容
$jsonContent = json_encode($test, JSON_PRETTY_PRINT);

// 写入文件
Storage::disk('chartData')->put('chart/test'.$_SESSION['companyId'].'.json', $jsonContent);

return 'done';

小优化建议

在Laravel开发中,更推荐使用框架提供的session()辅助函数来获取会话数据,替代原生的$_SESSION,比如:

session('companyId')

这样更贴合Laravel的开发规范,也能更好地利用框架的会话管理能力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:56:51