如何解决使用 JSON_ARRAY_APPEND 将大数组插入到 JSON 文档中
我正在使用 JSON_ARRAY_APPEND
更新表中现有条目中的数组对象。
我是通过代码和查询来做的,如下所示:
UPDATE table t1
SET t1.value = JSON_ARRAY_APPEND('[]','$',JSON_OBJECT('desc','${desc}','hosts','[${hosts}]'))
WHERE t1.key = '${key1}
我得到的 value
如下所示:
[{"desc": "this is desc","hosts": "[host1,host2,host3]"}]
value
的期望输出为:
[{"desc": "this is desc","hosts": ["host1","host2","host3"]"}]
解决方法
``
SELECT CONCAT('"',REPLACE('${hosts}',','","'),'"');
UPDATE table t1
SET t1.value = JSON_ARRAY_APPEND('[]','$',JSON_OBJECT('desc','${desc}','hosts','[${hosts}]'))
WHERE t1.key = '${key1};
SET @host = 'host1,host2,host3';
UPDATE table t1
SET t1.value = JSON_ARRAY(
JSON_OBJECT(
'desc','this is desc',JSON_ARRAY(
SUBSTRING_INDEX(@host,1),SUBSTRING_INDEX(SUBSTRING_INDEX(@host,2),-1),3),-1)))) ;
''
,您不需要使用 JSON_ARRAY_APPEND(),因为您正在创建一个新数组。
使用JSON_ARRAY()。这确保数组将被格式化为有效的 JSON。您应该尽量避免编写通过连接逗号、方括号和引号来形成 JSON 的代码,因为很难确保这将始终生成有效的 JSON 格式。这是脆弱的代码。
另外,使用查询参数而不是尝试将代码变量插入到您的 SQL 语句中。
UPDATE table t1
SET t1.value = JSON_ARRAY(
JSON_OBJECT(
'desc',?,JSON_ARRAY(?,?))
WHERE t1.key = ?
您需要一个 ?
参数标记,用于您的 hosts 阵列中的每个主机。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。