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

使用Laravel Excel导入CSV时JSON字段引号转义多余斜杠问题求解

问题根源

CSV导入时Maatwebsite/Laravel-Excel默认会对包含逗号、双引号的字段(比如你这个JSON数组)按照CSV规范做二次转义:外层多套了一层双引号,JSON内部的双引号前也被自动插入了反斜杠做转义。你之前直接对未处理的原始导入值调用json_encode/json_decode,相当于把转义符也当成了内容的一部分处理,自然会新增更多斜杠。

解决方案

方案1:单字段手动清理(兼容性最好,不会影响其他字段解析)

在你的Import类的model方法或者prepareForValidation方法中,对JSON字段做如下处理:

public function model(array $row)
{
    // 替换为你实际的JSON字段对应导入列名
    $rawJson = $row['your_json_column'];

    // 第一步:去掉字段首尾多余的双层双引号
    $cleanJson = trim($rawJson, '"');
    // 第二步:去掉JSON内容里多余的转义反斜杠
    $cleanJson = stripslashes($cleanJson);
    // 第三步:解码为数组,若模型已配置该字段为JSON cast,直接存数组即可
    $formattedValue = json_decode($cleanJson, true);

    return new YourModel([
        'your_json_column' => $formattedValue,
        // 其他字段赋值
    ]);
}

方案2:全局调整CSV解析配置(适合CSV所有字段无默认引号包裹的场景)

在Import类中新增配置方法,关闭CSV默认的字段包裹符识别,避免自动添加多余转义:

use Maatwebsite\Excel\Concerns\WithCustomCsvSettings;

class YourImport implements WithCustomCsvSettings
{
    // 其他原有逻辑

    public function getCsvSettings(): array
    {
        return [
            // 将字段包裹符设为空,不再自动识别并转义带引号的字段
            'enclosure' => '',
        ];
    }
}

处理完成后存入数据库的JSON字段就会和原始格式完全一致,不会再有多余转义符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:06:01