Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays MariaDB JSON_ARRAY_APPEND对象而不是它';s字符串表示法_Arrays_Json_Mariadb - Fatal编程技术网

Arrays MariaDB JSON_ARRAY_APPEND对象而不是它';s字符串表示法

Arrays MariaDB JSON_ARRAY_APPEND对象而不是它';s字符串表示法,arrays,json,mariadb,Arrays,Json,Mariadb,当我使用JSON_array_APPEND()插入表示对象的字符串时,我接收的是数组中带引号的字符串值,而不是对象数组 我需要一种方法来强制插入数组的值成为对象,而不是它的字符串表示形式 服务器: 10.2.18-MariaDB-log MariaDB服务器 Linux x86_64 以下是我试图获得工作的一个示例: set @NewArrayItem = '{"item2": "value2"}'; SELECT JSON_ARRAY_APPEND('{"SomeData": "SomeVal

当我使用JSON_array_APPEND()插入表示对象的字符串时,我接收的是数组中带引号的字符串值,而不是对象数组

我需要一种方法来强制插入数组的值成为对象,而不是它的字符串表示形式

服务器: 10.2.18-MariaDB-log MariaDB服务器 Linux x86_64

以下是我试图获得工作的一个示例:

set @NewArrayItem = '{"item2": "value2"}';
SELECT JSON_ARRAY_APPEND('{"SomeData": "SomeValue", "AnArray": [{"item1": "value1"}]}', '$.AnArray', @NewArrayItem ) as outval;
数组中的第二个元素($.AnArray[1])是字符串而不是对象

我期待着:

{"SomeData": "SomeValue", "AnArray": [{"item1": "value1"}, {"item2": "value2"}]}
但我实际上得到:

{"SomeData": "SomeValue", "AnArray": [{"item1": "value1"}, "{\"item2\": \"value2\"}"]}
我看到以下方法可行,但我的限制条件是,value@NewArrayItem是另一个应用程序中格式正确的字符串:

SELECT JSON_ARRAY_APPEND('{"SomeData": "SomeValue", "AnArray": [{"item1": "value1"}]}', '$.AnArray', JSON_OBJECT('item2','value2') ) as outval;

我通过JSON_集、JSON_合并和JSON_查询的组合解决了这个问题:

set @ExistingData = '{"SomeData": "SomeValue", "AnArray": [{"item1": "value1"}]}';
set @NewArrayItem = '{"item2": "value2"}';
SELECT JSON_SET(@ExistingData, '$.AnArray', JSON_MERGE(ifnull(JSON_QUERY(@ExistingData, '$.AnArray'),'[]'),@NewArrayItem) ) as outval;
另外,它还适用于阵列不存在的情况:

set @ExistingData = '{"SomeData": "SomeValue"}';
set @NewArrayItem = '{"item2": "value2"}';
SELECT JSON_SET(@ExistingData, '$.AnArray', JSON_MERGE(ifnull(JSON_QUERY(@ExistingData, '$.AnArray'),'[]'),@NewArrayItem) ) as outval;


仍在寻找更简单的答案。

使用实际列而不是在JSON中隐藏数据是否更好?