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

Laravel中json_decode解析后字符串多引号致explode失败求助

问题解决:Laravel读取JSON后choices字段带额外引号导致explode失败

问题还原

在Laravel中从数据库读取JSON格式的字段$field['options'],执行以下代码时,发现解析后的$options['choices']被添加了额外引号,导致explode无法正常拆分内容:

$options = json_decode($field['options'],true);
$rows = explode('\n', $options['choices']);
dd($field['options'],$options,$rows,'here');

已知原始$field['options']是格式正确的JSON字符串。

原因分析

这种情况通常是因为数据库中存储的JSON里,choices字段的值本身是被转义的字符串(相当于双层JSON结构)。比如原始JSON可能是类似这样:

{"choices": "\"选项1\\n选项2\\n选项3\""}

第一次json_decode后,$options['choices']会变成带首尾引号的字符串:"选项1\n选项2\n选项3",而非预期的纯换行分隔字符串。另外,代码中使用explode('\n', ...)是用单引号包裹换行符,这会把'\n'当作字面量字符(反斜杠+n),而非实际的换行符,也是拆分失败的诱因之一。

解决方案

方案1:修复数据存储逻辑(推荐)

确保存入数据库的JSON中,choices字段直接存储为未被转义的换行分隔字符串,正确的JSON格式应该是:

{"choices": "选项1\n选项2\n选项3"}

之后修改代码中explode的换行符为双引号包裹:

$options = json_decode($field['options'], true);
$rows = explode("\n", $options['choices']);

方案2:针对已存储的错误数据做二次解析

如果数据库中已经存了带转义的choices值,可以对$options['choices']做二次JSON解码,再拆分:

$options = json_decode($field['options'], true);
// 二次解码choices字段,去除额外引号并解析转义字符
$choices = json_decode($options['choices'], true) ?? $options['choices'];
// 用双引号的换行符拆分
$rows = is_string($choices) ? explode("\n", $choices) : [];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 00:44:54