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

如何在Laravel中正确向MySQL插入/获取JSON对象数组

Laravel JSON数组存储异常问题:错误分析与修复

核心错误:重复JSON编码

你遇到的问题根源是对JSON数据进行了多次编码,导致存入数据库的内容是经过多层转义的无效JSON,最终获取时解码异常。

具体错误点

  1. 控制器冗余编码:
    你定义的$smsText已经是合法的JSON字符串,却额外调用json_encode($smsText, true),把JSON字符串当作普通字符串再次编码,产生大量冗余转义符。
  2. 模型Mutator与控制器操作冲突:
    模型中为sms字段定义的set方法会自动执行json_encode,控制器提前编码后,模型再次编码,形成双重编码,这是导致异常输出的直接原因。

修复方案

方案1:直接传递原始JSON字符串(推荐)

删除控制器中多余的json_encode步骤,直接将合法JSON字符串赋值给字段,模型的Mutator会自动完成编码存储:

$smsText = '[
    { "id": 1, "sentBy": "Hardik", "sms": "Mambo vipi"},
    { "id": 2, "sentBy": "Vimal", "sms": "Poa sana"},
    { "id": 3, "sentBy": "Harshad", "sms": "Karibu kwetu"}
]';

$input = [
    // 其他字段
    'sms' => $smsText
    // 其他字段
];

SmsModel::create($input);

方案2:传递PHP数组给模型

如果偏好数组操作,可先将JSON字符串解码为PHP数组,再传递给模型,Mutator会自动编码为JSON存入数据库:

$smsText = '[
    { "id": 1, "sentBy": "Hardik", "sms": "Mambo vipi"},
    { "id": 2, "sentBy": "Vimal", "sms": "Poa sana"},
    { "id": 3, "sentBy": "Harshad", "sms": "Karibu kwetu"}
]';

$smsArray = json_decode($smsText, true);

$input = [
    // 其他字段
    'sms' => $smsArray
    // 其他字段
];

SmsModel::create($input);

验证修复效果

修复后,从模型获取sms字段时,模型的Accessor会自动执行json_decode($value, true),返回正常的PHP数组,无需额外解码操作。

额外确认点

  • 迁移文件中$table->json('sms')->nullable()的配置正确,MySQL JSON类型会自动校验存储内容的合法性;
  • 模型$fillable数组已包含sms字段,这部分配置无误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 18:13:31