Замените все значения в паре Ключ-значение в документе JSON в MySQL

#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, такого как вставка в таблицу, а значения отображаются через столбцы