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

