#mysql #mysql-json
Вопрос:
В конце концов, у меня есть данные JSON следующим образом:
set @injsondata = '{
"action": "SaveEventByMinutes",
"eventbyminutes": [{"matchid":10001,"minute":"1","halftime":"1","value":"A","userid":1,"createddate":"2021-09-25"},
{"matchid":10001,"minute":"2","halftime":"1","value":"X","userid":1,"createddate":"2021-09-25"}]}';
Теперь я хочу изменить значение matchid на 10002, используя оператор select в MySQL.
Что я пробовал
1. select JSON_merge_patch(@injsondata,'{"eventbyminutes[*]":{"matchid": 10002}}');
2. SELECT JSON_replace(@injsondata, '{"eventbyminutes":{"matchid":2}}');
Но ничего не получается
Есть ли какой-нибудь другой вариант для этого?
или мне нужно создать функцию или процедуру, например
DELIMITER $
CREATE DEFINER=`root`@`localhost` FUNCTION `func_modify_json`(injsondata json) RETURNS json
DETERMINISTIC
begin
declare len int default json_length(injsondata);
declare i int default 0;
declare outjsondata json;
while i < len do
# Replace the report4 property of the i'th element with an empty list
set outjsondata = JSON_replace(injsondata,'$[0].eventbyminutes[i].matchid',10002);
set i = i 1;
end while;
return outjsondata;
end$
DELIMITER ;
Что — то вроде вышеприведенного?
Комментарии:
1. Вам было бы намного проще, если бы вы создали правильную структуру таблиц для обработки данных, вместо того, чтобы пытаться объединить данные в один столбец в формате JSON.
2. Дорогой Билл, сценарий выглядит примерно так: файл excel будет загружен с переднего конца, затем angular проанализирует этот файл excel и подготовит json, а средний уровень .net вызовет процедуру MySQL, и этот json будет передан из него. Я уже создал таблицу с этой структурой, и там эти данные вставляются с помощью объекта json, такого как вставка в таблицу, а значения отображаются через столбцы