найти число в json значении массива с регулярным выражением - PullRequest
0 голосов
/ 08 января 2020

я хочу сопоставить строку в json строку, например:

"ids":[44,53,1,3,12,45]

я хочу выполнить запрос в sqlite, отправить только одну ди git как id и сопоставить одну из указанных выше id в sql выражении

я пишу это регулярное выражение "ids":[\[] для соответствия начала ключа, но я не имею ни малейшего представления, чтобы соответствовать середине id и экранированию, начиная с id

примера : у меня есть calc_method таблица, подобная этой:

CREATE TABLE "calc_method" (
  "calc_method_id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
  "calc_method_name" TEXT NOT NULL,
  "calc_method_value" TEXT NOT NULL
);

в столбце calc_method_value Я храню calcMethod класс, который преобразуется в json, используя Gson

class calcMethod{
    var memberCafeIds:ArrayList<Long>,
    var memberBarIds:ArrayList<Long>
}

после я конвертирую calcMethod в json У меня есть вывод, как показано ниже, и это значение хранится в столбце calc_method_value:

{"memberCafeIds":[1,2,14,5,44],"memberBarIds":[23,1,5,78]}

Теперь я хочу выбрать строку, которая соответствует моему шаблону регулярных выражений, как если бы столбец calc_method_value иметь memberBarIds с идентификатором 1

SELECT * FROM calc_method WHERE calc_method_value REGEXP '"memberCafeIds":\[[:paramId]'

:paramId является параметром метода

С уважением, программист борется с регулярным выражением

1 Ответ

1 голос
/ 08 января 2020

В Sqlite используйте функции JSON1 для работы с JSON, а не с регулярными выражениями. В частности, json_each(), чтобы превратить массив JSON в таблицу, которую вы можете запросить:

sqlite> CREATE TABLE ex(json);
sqlite> INSERT INTO ex VALUES ('{"ids":[44,53,1,3,12,45]}');
sqlite> SELECT * FROM ex WHERE 1 IN (SELECT value FROM json_each(ex.json, '$.ids'));
json                     
-------------------------
{"ids":[44,53,1,3,12,45]}
sqlite> SELECT * FROM ex WHERE 50 IN (SELECT value FROM json_each(ex.json, '$.ids'));
sqlite>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...