json - Jooq Postgres JSON 查询

标签 json postgresql jooq

使用 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/

相关文章:

java - 如何将 Jooq 源代码生成与 M2E 一起使用?

javascript - 迭代 JSON 中的复杂对象列表?

json - 如何列出 Gorilla Mux 中的所有变量?

java - 改造 JSON 请求不解析 Java 对象

ios - Zoopla API,尝试快速从 JSON 中获取一些值

sql - 为什么我在 postgres 中使用随机函数在 select 中获得多条记录?

java - 如何使用 JOOQ 批量执行

node.js - NodeJS Bookshelf 用户-追随者关系示例

sql - 在具有 MAX 聚合的 SQL 中使用 GROUP BY 并选择不在 GROUP BY 语句中的附加列

spring - jOOQ 3.1 打印日志,但 jOOQ 3.4 不打印