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

Laravel中如何将Redis缓存读取的字符串转换为JSON数组?

问题原因

你从Redis获取到的s:13:"{"foo":"bar"}";是PHP序列化后的字符串格式,s代表数据类型为字符串,13代表字符串长度,后面包裹的是实际存储的内容。出现该问题一般是存入Redis时调用了PHP的serialize()方法,或是Laravel缓存驱动默认做了序列化处理。

转换为目标JSON数组的实现方法

1. 直接处理已拿到的序列化字符串

两步操作即可得到预期结构:先反序列化拿到原始JSON内容,再封装为外层数组结构:

// 第一步:反序列化Redis返回的字符串,得到原始{"foo":"bar"}内容
// 传入allowed_classes参数可避免反序列化安全风险
$rawJson = unserialize($redisValue, ['allowed_classes' => false]);
// 第二步:把JSON转为数组后包裹成外层数组,得到预期结构
$targetArray = [json_decode($rawJson, true)];
// 如果需要输出JSON字符串格式的[{"foo":"bar"}]
$targetJson = json_encode($targetArray);

2. 从存入环节优化,避免后续重复处理

如果要后续直接从Redis读取到目标格式,存入时跳过默认序列化,直接存最终JSON即可:

// 直接存入目标结构的JSON
$saveData = [["foo" => "bar"]];
Redis::set('your_cache_key', json_encode($saveData));

// 后续读取时直接解码即可拿到目标数组
$targetArray = json_decode(Redis::get('your_cache_key'), true);

如果使用Laravel的Cache门面操作,也可以直接存入原始JSON字符串:

Cache::store('redis')->put('your_cache_key', json_encode($saveData), 3600);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:15:03