如何在Postgresql(Java)中使用JSON进行搜索

如何在Postgresql(Java)中使用JSON进行搜索,java,postgresql,search,text,Java,Postgresql,Search,Text,我想在Postgresql中搜索记录。我有一个表和一个列,它被创建为文本数据类型(称为列)。在一列中,我将数据另存为JSON数据类型。 例如: ID A column 1 {"A1":["1"]} 2 {"A2":["2"], "B":["3"]} 我正在使用Java搜索数据。我的条件搜索为“A1”:[“1”,“2”]。 如何搜索? 请帮我解决这个问题 这样: CREATE TEMP TABLE tab (ID int

我想在Postgresql中搜索记录。我有一个表和一个列,它被创建为文本数据类型(称为列)。在一列中,我将数据另存为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列”
中的所有值都正确格式化为json时,它才会工作。否则,您必须使用函数捕获转换异常,并在转换异常为无效json值时返回null


更新 如果希望所有字段的值都在一个集合中,则

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

您如何使用java搜索数据?为什么不使用SQL<代码>从表中选择*,其中(“A列”->“A1”)='[“1”,“2”]::json“A列”数据类型为文本。当我在SQL上面运行时,我收到一条错误消息:运算符不存在:text->unknown。然后可以将其转换为JSON:
SELECT*FROM table WHERE(“a column”)::JSON->'A1')='[“1”,“2”]::JSON
Oh no。另外错误->运算符不存在:JSON=jsonoh是的,我忘了。通过这种方式,然后
从表中选择*,其中(“一列”::json->>'A1')='[“1”,“2”]'
oh。非常感谢你。但我想在运行query
SELECT*fromtab-WHERE(“A列”)::json->>“A2’=”[“1”,“2”],结果将是ID 1、2和3。现在只返回ID=3的记录。