我在mysql
中有一个名为names
的json类型列,它是一个简单的json数组(不是键/值)。我找不到将JSON_EXTRACT
,JSON_SET
,JSON_REPLACE
,JSON_INSERT
用于简单json数组字段的任何示例。
我知道还有其他方法可以处理json字段类型的json数组,但是可以将这些函数用于json数组吗?
例如,name
字段包含["A","B","C"]
,我如何使用这些函数在json上执行更新,插入和删除操作?
更新
查询必须从php脚本执行
答案 0 :(得分:2)
您的值不是MySQL的有效JSON数组。它必须采用["A", "B", "C"]
的形式。一旦完成,您所引用的功能将完全按照manual中的说明和要求运行。也就是说JSON_SET
将插入或替换一个值(如果已经存在),JSON_INSERT
将插入一个值(如果不存在),而JSON_REPLACE
将替换一个预先存在的值。 / p>
-- 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"]
答案 1 :(得分:0)
我认为找到了解决方法
对于json数组,无法通过数组值使用JSON_EXTRACT
,JSON_SET
,JSON_REPLACE
,JSON_INSERT
,而且您必须知道每个值在数组中的位置json数组(我认为这是一个弱点)。
例如,选择第二个值,您可以使用$[1]
,
但是对于插入值,您可以使用
JSON_ARRAY_APPEND
和JSON_ARRAY_INSERT