如何将带有列表的 JSON 数据转换为使用动态列的 MariaDB SQL 插入语句
How to convert JSON data with a list into an MariaDB SQL Insert statement that uses dynamic columns
是否可以像下面使用动态列的示例那样在 MariaDB 中存储 JSON 列表字段:
{
"myfield": "value1",
"myList": ["item1" , "item2", "item3"]
}
遗憾的是,MariaDB 动态列本身不支持 JSON 数组列表,尽管这是一个解决方案,并且可以更好地使用 INTEGERS,但您可以尝试使用字符串。
ALTER TABLE `your_table` ADD COLUMN `dynamic_column` BLOB NULL DEFAULT
NULL ;
您将数组列表作为字符串存储在动态列中
INSERT INTO
your_table (dynamic_column)
VALUES
(COLUMN_CREATE('myfield','value1'
,'myList','["item1" , "item2", "item3"]')
);
或
UPDATE
your_table
SET
dynamic_column = COLUMN_CREATE('myfield','value1'
,'myList','["item1" , "item2", "item3"]'
)
WHERE
id = your_id ;
到目前为止一切顺利,现在是棘手的部分。如何在不破坏格式的情况下 return。使用替换函数:
SELECT REPLACE(REPLACE(COLUMN_JSON(dynamic_column),'"[','['),']"',']') FROM your_table ;
您也可以在不创建任何 table.
的情况下快速测试输出
SET @tmp= COLUMN_CREATE('myfield','value1','myList','[ "item1" , "item2" , "item3" ]' ) ;
SELECT REPLACE(REPLACE(COLUMN_JSON(@tmp),'"[','['),']"',']') json_string;
如果它输出破坏 json 格式的 '\' :
+----------------------------------------------------------------------+
| json_string |
+----------------------------------------------------------------------+
| {"myList":[ \"item1\" , \"item2\" , \"item3\" ],"myfield":"value1"} |
+----------------------------------------------------------------------+
然后试试
SELECT REPLACE(REPLACE(REPLACE(COLUMN_JSON(@tmp),'"[','['),']"',']'),'\','') json_string;
+----------------------------------------------------------------+
| json_string |
+----------------------------------------------------------------+
| {"myList":[ "item1" , "item2" , "item3" ],"myfield":"value1"} |
+----------------------------------------------------------------+
试一试!!
** 不要忘记在任何在线验证器或文本编辑器(如 textwrangler 或记事本++)上验证 json 字符串输出
** 请注意,有时动态列可能会带来动态痛苦
干杯
CAST 可以替换为
JSON_MERGE('{"key": "val"}', JSON_OBJECT());
是否可以像下面使用动态列的示例那样在 MariaDB 中存储 JSON 列表字段:
{
"myfield": "value1",
"myList": ["item1" , "item2", "item3"]
}
遗憾的是,MariaDB 动态列本身不支持 JSON 数组列表,尽管这是一个解决方案,并且可以更好地使用 INTEGERS,但您可以尝试使用字符串。
ALTER TABLE `your_table` ADD COLUMN `dynamic_column` BLOB NULL DEFAULT
NULL ;
您将数组列表作为字符串存储在动态列中
INSERT INTO
your_table (dynamic_column)
VALUES
(COLUMN_CREATE('myfield','value1'
,'myList','["item1" , "item2", "item3"]')
);
或
UPDATE
your_table
SET
dynamic_column = COLUMN_CREATE('myfield','value1'
,'myList','["item1" , "item2", "item3"]'
)
WHERE
id = your_id ;
到目前为止一切顺利,现在是棘手的部分。如何在不破坏格式的情况下 return。使用替换函数:
SELECT REPLACE(REPLACE(COLUMN_JSON(dynamic_column),'"[','['),']"',']') FROM your_table ;
您也可以在不创建任何 table.
的情况下快速测试输出SET @tmp= COLUMN_CREATE('myfield','value1','myList','[ "item1" , "item2" , "item3" ]' ) ;
SELECT REPLACE(REPLACE(COLUMN_JSON(@tmp),'"[','['),']"',']') json_string;
如果它输出破坏 json 格式的 '\' :
+----------------------------------------------------------------------+
| json_string |
+----------------------------------------------------------------------+
| {"myList":[ \"item1\" , \"item2\" , \"item3\" ],"myfield":"value1"} |
+----------------------------------------------------------------------+
然后试试
SELECT REPLACE(REPLACE(REPLACE(COLUMN_JSON(@tmp),'"[','['),']"',']'),'\','') json_string;
+----------------------------------------------------------------+
| json_string |
+----------------------------------------------------------------+
| {"myList":[ "item1" , "item2" , "item3" ],"myfield":"value1"} |
+----------------------------------------------------------------+
试一试!!
** 不要忘记在任何在线验证器或文本编辑器(如 textwrangler 或记事本++)上验证 json 字符串输出
** 请注意,有时动态列可能会带来动态痛苦
干杯
CAST 可以替换为 JSON_MERGE('{"key": "val"}', JSON_OBJECT());