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

Laravel7 非JS环境下如何向现有JSON对象插入新JSON对象

解决方案

你操作失败的核心原因是原始数据中json字段本身是一个转义后的JSON字符串,需要分层解码处理,不能直接对整个外层JSON解码后直接合并,以下是完整可运行的PHP实现方案:

完整操作步骤

1. 定义源数据

// 原始JSON字符串
$originalJson = <<<JSON
{
"id": 1,
"horaire_id": 1,
"json": "{\"i\": \"idHoraire1-NumReservation1\", \"x\": 3, \"y\": 2, \"w\":5, \"h\": 3, \"j\": 0}",
"num_reserv": 1,
"nombre_heures": 7.5,
"created_at": "2021-09-16T13:55:00.000000Z",
"updated_at": "2021-09-16T13:55:03.000000Z"
}
JSON;

// 待插入的JSON字符串
$toInsertJson = <<<JSON
{
"id": 1,
"evenement_type_id": 1,
"reservation_id": 1,
"posinreserv": 1,
"campus_id": 1,
"comment": null,
"created_at": null,
"updated_at": null
}
JSON;

2. 分层解码

// 解码外层原始JSON为数组
$originalArr = json_decode($originalJson, true);
// 解码原始数据中嵌套的json字段字符串为数组
$innerJsonArr = json_decode($originalArr['json'], true);
// 解码待插入的JSON为数组
$toInsertArr = json_decode($toInsertJson, true);

3. 按需求合并数据

两种常见场景二选一:

  • 场景1:把待插入对象合并到外层的原始JSON对象中
$mergedArr = array_merge($originalArr, $toInsertArr);
// 转成最终JSON
$finalJson = json_encode($mergedArr, JSON_PRETTY_PRINT);
  • 场景2:把待插入对象合并到原始数据内部的json字段中
// 合并内部数据
$mergedInnerArr = array_merge($innerJsonArr, $toInsertArr);
// 把合并后的内部数据重新编码为字符串,放回原数组
$originalArr['json'] = json_encode($mergedInnerArr);
// 转成最终JSON
$finalJson = json_encode($originalArr, JSON_PRETTY_PRINT);

注意:array_merge会以新数组的同名字段覆盖旧数组,如果需要保留原数组的字段优先,可以改用数组加号运算符:$mergedArr = $originalArr + $toInsertArr

调试技巧

如果解码失败,可以用json_last_error_msg()打印错误信息,排查是否存在JSON格式错误、转义异常问题,Laravel中也可以用dd(json_last_error_msg())快速调试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:39:03