java - 如何在 Postgresql (Java) 中按 JSON 进行搜索

标签 java postgresql search text

我想在 Postgresql 中搜索记录。我有一个表和一个创建为文本数据类型的列(称为 A 列)。在 A 列中,我将数据保存为 JSON 数据类型。 例如:

ID             A column
1              {"A1":["1"]}
2              {"A2":["2"], "B":["3"]}

我正在使用 Java 搜索数据。我的条件搜索是“A1”:[“1”,“2”]。 我怎样才能搜索到? 请帮我解决问题!

最佳答案

这样:

CREATE TEMP TABLE tab (ID int, "A column" text);
INSERT INTO tab VALUES 
  (1, '{"A1":["1"]}'),
  (2, '{"A2":["2"], "B":["3"]}'),
  (3, '{"A2":["1","2"], "B":["3"]}');

SELECT * FROM tab WHERE ("A column"::json->>'A2') = '["1","2"]';

只有当 "A column" 中的所有值都是正确格式化的 json 时,它才会起作用。否则,您必须使用一个函数来捕获转换异常并在它是无效的 json 值时返回 null。


更新

如果您希望所有字段都具有一个集合中的值,那么

SELECT * FROM tab 
WHERE ARRAY(select json_array_elements_text("A column"::json->'A2')::text)
        && ARRAY['1','2'];

关于java - 如何在 Postgresql (Java) 中按 JSON 进行搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37849036/

相关文章:

java - 如何更改 JCheckBox 中聚焦环的颜色?

java - 函数的开始和停止时间不断返回 0 或 1

c# - 从 postgres 取回消息

java - 搜索 ArrayList

ruby-on-rails - Ransack搜索,如何通过分割输入搜索参数来搜索每个词

Java 充气城堡 : Invalid point encoding 0x45

java - 使用 keycloak 管理客户端显示用户电子邮件不起作用(UnrecognizedPropertyException)

postgresql如何分组然后得到first_time和last_time,

sql - 将一个表中的值添加到另一个表

search - 设置solr搜索词所需字符