我的資料庫中有下表:
Type | Name
-------------------------------------------------
INT(10) UNSIGNED | id
LONGTEXT | settings
設定列包含 JSON 字串,如下所示:
'[
{"value":"1","label":"user_type"},
{"value":"2","label":"email_type"}
]'
我有一些不符合所需格式的損壞資料,因為現在要求已更改。
'[
{"value": 8,"label":"should_receive_notifications"},
]'
請注意,與我需要它們的第一個示例相比,該值是如何不被參考的。
有沒有辦法可以對設定列中的所有 JSON 字串進行查找和替換,以更新 JSON 字串中所有未加引號的值并將它們用引號括起來?
uj5u.com熱心網友回復:
您可以使用下一個程序:
CREATE PROCEDURE quote_value(max_amount INT)
BEGIN
REPEAT
UPDATE test
SET settings = JSON_REPLACE(settings, CONCAT('$[', max_amount, '].value'), CAST(JSON_UNQUOTE(JSON_EXTRACT(settings, CONCAT('$[', max_amount, '].value'))) AS CHAR));
SET max_amount = max_amount - 1;
UNTIL max_amount < 0 END REPEAT;
END
max_amount引數定義陣列中要更新的物件數量(不要忘記陣列元素從零開始計數)。因此,將其設定為每個陣列數量值的最大物件數。
https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=166f43d44e57b62da034bd9530713beb
uj5u.com熱心網友回復:
這是假設json字串中的字符之間沒有空格,簡單但需要為此驗證資料。
update tablename
set settings = replace(settings, '"value\":' , '"value":\"')
where settings not like '%"value":"%'
update tablename
set settings = replace(settings, ',"' , '","')
where settings not like '%","%'
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/477189.html
上一篇:C#從檔案中獲取Json值
下一篇:如何使用jq列印嵌套值和父級值
