在json数组中使用json\u extract、json\u set、json\u replace、json\u insert

toe95027  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(415)

我有一个json类型的列 mysql 命名 names 它是一个简单的json数组(不是key/value)。我找不到任何使用 JSON_EXTRACT , JSON_SET , JSON_REPLACE , JSON_INSERT 对于简单json数组字段。
我知道还有其他方法可以在json字段类型中操作json数组,但是有可能对json数组使用这些函数吗?
例如, name 字段包含 ["A","B","C"] ,如何使用这些函数对这个json执行更新、插入和删除操作?
更新
查询必须从php脚本执行

qncylg1j

qncylg1j1#

您的值不是mysql的有效json数组。它需要在形式上 ["A", "B", "C"] . 一旦启动,您所指的功能将完全按照预期和手册中的描述工作;也就是说 JSON_SET 如果值已经存在,将插入或替换, JSON_INSERT 如果值不存在,则将插入,并且 JSON_REPLACE 将替换预先存在的值。

-- extract second element
select json_extract('["A", "B", "C"]', '$[1]')
"B"

-- replace second element
select json_set('["A", "B", "C"]', '$[1]', 'D')
["A", "D", "C"]

-- insert fourth element
select json_set('["A", "B", "C"]', '$[3]', 'E')
["A", "B", "C", "E"]

-- attempt to insert second element fails as it already exists
select json_insert('["A", "B", "C"]', '$[1]', 'F')
["A", "B", "C"]

-- insert fourth element
select json_insert('["A", "B", "C"]', '$[3]', 'F')
["A", "B", "C", "F"]

-- replace second element
select json_replace('["A", "B", "C"]', '$[1]', 'G')
["A", "G", "C"]

-- attempt to replace non-existing element fails
select json_replace('["A", "B", "C"]', '$[3]', 'G')
["A", "B", "C"]
mlnl4t2r

mlnl4t2r2#

我想我找到了解决办法
对于json数组,不能使用 JSON_EXTRACT , JSON_SET , JSON_REPLACE , JSON_INSERT 通过数组值,您必须知道每个值在json数组中的位置(在我看来,这是一个弱点)。
例如,选择可以使用的第二个值 $[1] ,但对于插入值,可以使用 JSON_ARRAY_APPEND 以及 JSON_ARRAY_INSERT

相关问题