Удалите ключи JSON с подстановочными знаками из поля MySQL - PullRequest
0 голосов
/ 27 мая 2020

У меня есть база данных MySQL 8.0.20 с таблицей, в которой описаны метаданные о загруженных файлах изображений. Один столбец содержит объект JSON с целым набором автоматически сгенерированных данных, которые я пытаюсь очистить.

Этот JSON объект иногда содержит один или more имена ключей переменных, соответствующие заданному шаблону c. Что-то вроде

{
 "image_name": "P10043983",
 "image_size": "60138",
 "image_original_exifdata": "{
   'FileName':'P10043983.jpg',
   'MimeType':'image/jpeg',
   'UndefinedTag:0xA435':'\u0000\u0000\u0000\u0000\u0000\u0000'
 }"
}

Это UndefinedTag:0xA435 (со многими перестановками) является проблемой. Это относится к различным деталям Exif изображения, таким как тип объектива, данные GPS и т. Д. c. Это вещи, которые меня не интересуют и которые эти камеры в основном не предоставляют, поэтому я получил таблицу, полную длинных строк бесполезных символов, которые просто занимают место. Я хочу, чтобы эти JSON поля были убраны из соображений производительности и чистоты.

Есть ли способ выполнить запрос SQL, который использовал бы подстановочные знаки или регулярные выражения для поиска (и, в идеале, удаления) всех этих надоедливых переменные ключи? Я бы не хотел вручную составлять список всех возможных ключей "UndefinedTag" для поиска, и мне также не понравились результаты, когда я просто рассматривал все это как строку и выполнял вызовы REGEXP_REPLACE (иногда оставалось конечные запятые, которые сломали мой JSON и которые мне было трудно избежать / разрешить).

Я знаю, что некоторые из функций JSON, например JSON_SEARCH(), принимают подстановочные знаки, но в нем явно говорится, что путь поиска может ' t end в подстановочном знаке (поэтому UndefinedTag:0x** не допускается). Многие из функций, которые мне нужны (например, JSON_REMOVE()), вообще не принимают подстановочные знаки. Черт, у меня даже были проблемы с поиском известных ключей, и я подозреваю, что это глупое двоеточие в имени ключа может иметь какое-то отношение к этому.

Итак, как я могу очистить свой table и удалите множество форм этой проблемы UndefinedTag ? Может быть, проще просто go вернуться к плану regex_replace и вместо этого заняться конечными запятыми?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...