php - 在 PHP 中替换 MySQL 中的 JSON 数组
问题描述
我正在尝试在我的 MySQL 数据库中的 JSON 数组中替换 JSON 数组中的数据。
数组如下所示:
{"slug": "SLUG","price": "{"44":12,"_default":12}", "test": "TEST"}
现在我想更新价格数组中的两个字段。
我使用以下代码能够用字符串或数字替换价格数组,但我无法用另一个数组替换它:
$sql = "UPDATE products SET productDynamicFields = JSON_REPLACE(productDynamicFields,'$.price', '$test')
Where productSlug = '$productSlug'";
$result = mysqli_query($link,$sql);
如您所见,我正在使用一个名为$test
.
我尝试为变量提供以下值:$test = ['44' => 13, '_default' => 13];
然后像这样对其进行编码:$test = json_encode($test);
但现在在我的数据库中,它看起来像这样:
"price": "{\"44\":13,\"_default\":13}
我现在尝试使用JSON_UNESCAPED_SLASHES
没有成功。
怎么做才能实现数组里面的数组?
解决方案
与其从 php 生成 json 并尝试将其传递给 MySQL,不如使用 MySQL 函数json_object()
生成有效的 json 对象:
update t
set js = json_replace(js, '$.price', json_object('44', 13, '_default', 13))
create table t (js json);
insert into t values('{"slug": "SLUG","price": {"44":12,"_default":12}, "test": "TEST"}');
update t
set js = json_replace(js, '$.price', json_object('44', 13, '_default', 13));
select * from t
| js | | :------------------------------------------------ ------------------- | | {“slug”:“SLUG”,“test”:“TEST”,“price”:{“44”:13,“_default”:13}} |
笔记:
数组如下所示:
{"slug": "SLUG","price": "{"44":12,"_default":12}", "test": "TEST"}
这是一个 json对象(在 key 下有一个嵌入的 json 对象
"price"
),而不是一个 json 数组你在嵌入的对象周围有额外的双引号导致 json 无效,我认为这是一个错字并删除了它们
推荐阅读
- reactjs - Reactjs条件渲染问题
- html - div 内的视频背景和文本不会随着页面的其余部分滚动?
- flutter - 将 camera_platform_interface 从 1.0.4 升级到 1.2.0 导致相机无法工作
- sql - SELECT 语句中的表达式
- python - python if 语句无法与 gensim 语言模型一起正常工作
- php - WordPress Woocommerce Limited by PHP-FPM Processes Ram Utilization 的最大用户数
- python - 中断线程中的无限循环
- python - 请求的 URL 不允许该方法:使用 Flask POST 方法
- javascript - 在功能组件中使用方法回调测试按钮
- reactjs - 使用 React 的 UseEffect 和事件监听器的区别?