检查JSON数组中是否存在值

时间:2015-06-26 07:23:09

标签: sql json postgresql postgresql-9.3

我发现解决方案比这更复杂,但我无法做到这一点......

我有一个名为 json 数据列。 JSON结构如下:

{"actions": ["action1","action2","action3", ..., "actionN"]}

所以,假设我有3行,包含以下数据:

{"actions": ["work","run"]}
{"actions": ["run","eat","sleep", 'walk']}
{"actions": ["eat","run","work"]}

我想检索操作数组中包含工作的行。

我尝试过类似于此处发布的内容: Query for element of array in JSON column,但由于数组中的每个元素都只是一个json字符串,所以我被困在那里。

然后,我尝试了类似的事情:

SELECT * from table t WHERE 'work' in ...

但这也无法将值作为字符串数组放在那里。

使用PostgreSql 9.3。

1 个答案:

答案 0 :(得分:1)

由于您使用的是json类型,内部只是一个字符串,因此最简单的解决方案是:

SELECT * FROM table WHERE strpos(data::text, 'work') > 0;

它首先违背了使用json的目的,但在这个简单的情况下它(很可能)比json解析器更快。

json解决方案将是:

SELECT * FROM (
  SELECT *, unnest(data->"actions")::text AS action FROM table) AS foo
WHERE action = 'work';