【问题标题】:find number in json array value with regex使用正则表达式在 json 数组值中查找数字
【发布时间】:2020-04-26 04:35:51
【问题描述】:

我想要匹配 json 字符串中的字符串,例如:

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

我想在 sqlite 中运行查询,只发送一个数字为 id 并在 sql 语句中匹配上述 id 之一

我写这个正则表达式"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 使用Gson 转换为json 的类

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 和 id 1

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

:paramId是方法参数

问候,程序员与正则表达式的斗争

【问题讨论】:

  • 不完全清楚你在追求什么。你能给我们提供示例输出吗?
  • @ctwheels 我更新我的问题并添加示例

标签: arrays json regex sqlite


【解决方案1】:

在 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>

【讨论】:

  • 感谢您的回答,我更新了我的问题并添加了一个示例,您可以再次看到它吗?不能单独使用正则表达式吗?
  • @123 你必须加载一个提供正则表达式的 sqlite3 扩展,并且不。 SO上有大量关于为什么正则表达式不足以解析JSON的帖子。
  • 感谢@Shawn,我认为使用了错误的结构,必须将此 json 转换为表格。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多