我正在尝试select * from demo where demojson->'sub'->'item' = array("")
,但这不起作用。我想找到以下
.sub.item
的所有行都是一个只包含一个空字符串的数组([""]
).sub.item
的所有行都是一个可能包含多个项目的数组,但至少有一个项目是空字符串。 (["not empty", "also not empty", ""]
)demojson列可以包含例如
{
"key": "value",
"sub": {
"item": [""]
}
}
答案 0 :(得分:1)
你试过吗
SELECT * from demo
WHERE demojson->'sub'->>'item' = '[""]';
这里->>
运算符允许将JSON对象字段作为文本。
另一个解决方案
SELECT * from demo
WHERE json_array_length(demojson->'sub'->'item') = 1 AND
demojson->'sub'->'item'->>0 = '';
这里->>
运算符允许将JSON第一个数组元素作为文本。
答案 1 :(得分:1)
由于JSONLint没有验证提供的文本示例,我已经使用了下一个:
CREATE TABLE info (id int, j JSON);
insert into info values
(1, '{"key":"k1", "sub": {"item":["i1","i2"]}}'),
(2, '{"key":"k2", "sub": {"item":[""]}}'),
(3, '{"key":"k3", "sub": {"item":["i2","i3"]}}');
以这种方式使用where子句,它可以工作:
select * from info
where j->'sub'->>'item' = '[""]';
+----+------------------------------------+
| id | j |
+----+------------------------------------+
| 2 | {"key":"k2", "sub": {"item":[""]}} |
+----+------------------------------------+
答案 2 :(得分:1)
尝试以下方法:
SELECT * FROM demo
WHERE demojson->'sub'->'item' = to_jsonb(ARRAY['']);