使用 JOOQ 查询 postgres json 对象有什么支持?
例如,
SELECT id, data->'author'->>'first_name' as author_first_name FROM books;
最佳答案
许多标准的 SQL/JSON 运算符,例如 JSON_ARRAY()
, JSON_OBJECT()
, JSON_ARRAYAGG()
从 jOOQ 3.14 开始还支持更多。
目前(从 jOOQ 3.15 开始),仍未实现对这些供应商特定 JSON 运算符的支持:https://github.com/jOOQ/jOOQ/issues/10018
但是,您始终可以求助于使用 plain SQL .您的查询可以用 jOOQ 表示:
DSL.using(configuration)
.select(BOOKS.ID, field("{0}->'author'->>'first_name'",
String.class, BOOKS.DATA
).as("author_first_name"))
.from(BOOKS)
.fetch();
有关详细信息,请参阅 DSL.field()
方法 javadoc。
或者,编写您自己的迷你 API
如果您使用了很多这样的 JSON 路径符号,您也许可以像这样分解出一个迷你 API:
public static Field<Object> jsonObject(Field<?> field, String name) {
return DSL.field("{0}->{1}", Object.class, field, DSL.inline(name));
}
public static Field<String> jsonText(Field<?> field, String name) {
return DSL.field("{0}->>{1}", String.class, field, DSL.inline(name));
}
然后可以这样使用上面的内容:
DSL.using(configuration)
.select(BOOKS.ID, jsonText(jsonObject(BOOKS.DATA, "author"), "first_name")
.as("author_first_name"))
.from(BOOKS)
.fetch();
关于json - Jooq Postgres JSON 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25068563/