在JSON数组中使用JSON_EXTRACT,JSON_SET,JSON_REPLACE,JSON_INSERT

时间:2018-08-17 09:08:37

标签: mysql json

我在mysql中有一个名为names的json类型列,它是一个简单的json数组(不是键/值)。我找不到将JSON_EXTRACTJSON_SETJSON_REPLACEJSON_INSERT用于简单json数组字段的任何示例。

我知道还有其他方法可以处理json字段类型的json数组,但是可以将这些函数用于json数组吗?

例如,name字段包含["A","B","C"],我如何使用这些函数在json上执行更新,插入和删除操作?

更新

查询必须从php脚本执行

2 个答案:

答案 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_EXTRACTJSON_SETJSON_REPLACEJSON_INSERT,而且您必须知道每个值在数组中的位置json数组(我认为这是一个弱点)。

例如,选择第二个值,您可以使用$[1], 但是对于插入值,您可以使用 JSON_ARRAY_APPENDJSON_ARRAY_INSERT