如何将带有列表的JSON数据转换为使用动态列的MariaDB SQL Insert语句

时间:2015-08-28 12:06:27

标签: mysql json mariadb

是否可以使用动态列在MariaDB中存储JSON列表字段,如下例所示:

{
  "myfield": "value1",
  "myList": ["item1" , "item2", "item3"]
}

2 个答案:

答案 0 :(得分:1)

遗憾的是,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"]') 
            );

OR

UPDATE 
        your_table
    SET
        dynamic_column = COLUMN_CREATE('myfield','value1'
                                      ,'myList','["item1" , "item2", "item3"]'
                                      )
    WHERE 
            id = your_id ;

到目前为止,现在有了很好的部分。如何在不破坏格式的情况下返回。使用替换功能:

SELECT REPLACE(REPLACE(COLUMN_JSON(dynamic_column),'"[','['),']"',']') FROM your_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"} |
+----------------------------------------------------------------+

给它开始!!

** 不要忘记在任何在线验证器或文本编辑器上验证json字符串输出,如textwrangler或notepad ++

** 请注意,有时动态列可能是动态的痛苦

干杯

答案 1 :(得分:0)

CAST可以替换为     JSON_MERGE('{“ key”:“ val”}',JSON_OBJECT());