How to Remove Whole Index of List in a JSON
How to Remove Whole Index of List in a JSON
I have a JSON Values Like This.
{
"CHEQUE":[
{
"Cheque_No":"1",
"Cheque_Date":"2018-05-30",
"Cheque_Amount":"10000",
"Bank_Name":"ICICI"
},
{
"Cheque_No":"2",
"Cheque_Date":"2018-05-30",
"Cheque_Amount":"20000",
"Bank_Name":"ICICI"
},
{
"Cheque_No":"2",
"Cheque_Date":"2018-05-30",
"Cheque_Amount":"20000",
"Bank_Name":"SBI"
}
]
}'
How can i Remove Entire Index of 2 in a CHEQUE list using the search key SBI for Bank name?.
I need to Do this is in Mysql Stored Procedure without Store Values in DB. This is what I have tried:
CREATE DEFINER = root @ PROCEDURE SP_TEST(
IN ls_json JSON,
OUT Message VARCHAR(1000)
)
BEGIN
SELECT
JSON_REMOVE(
ls_json,
CONCAT('$.CHEQUE[0].Bank_Name[0]')
)
INTO ls_json;
#SELECT JSON_REMOVE(ls_json,JSON_SEARCH(ls_json,'ALL',
CONCAT('$.CHEQUE[0].Cheque_No[*]')))
INTO ls_json; #select
JSON_SEARCH(ls_json, 'one', 10000);
SELECT
ls_json;
END
So.. you haven't tried anything?
– N.B.
Jun 29 at 10:00
I tried a Stored procedure
– user3021019
Jun 29 at 13:00
1 Answer
1
One option:
DELIMITER //
CREATE PROCEDURE `SP_TEST` (
IN `_ls_json` JSON,
IN `_bank_name` VARCHAR(64)
)
BEGIN
DECLARE `_base` CHAR(11) DEFAULT '$.CHEQUE[*]';
DECLARE `_base_attr` CHAR(10) DEFAULT '.Bank_Name';
DECLARE `_element` VARCHAR(1024);
`_loop`: LOOP
SET `_element` :=
JSON_SEARCH(
`_ls_json`,
'one',
`_bank_name`,
NULL,
CONCAT(`_base`, `_base_attr`)
);
IF (`_element` IS NOT NULL) THEN
SET `_ls_json` :=
JSON_REMOVE(
`_ls_json`,
JSON_UNQUOTE(
REPLACE(`_element`, `_base_attr`, '')
)
);
ELSE
LEAVE `_loop`;
END IF;
END LOOP `_loop`;
SELECT JSON_PRETTY(`_ls_json`);
END//
DELIMITER ;
See db-fiddle.
By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.
I need to Do in it Mysql Stored Procedure.
– user3021019
Jun 29 at 9:59