如何在 jOOQ 中使用 formatJSON(JSONFormat) 正确格式化生成的 JSON 类型的例程结果?

How to properly format generated routine result of JSON type by using formatJSON(JSONFormat) in jOOQ?

我在使用 jOOQ 代码生成器查询 生成的例程 时,无法正确格式化我的 JSON 结果。我正在尝试对 PL/pgSQL 中定义的 get_all_orders() 方法执行 SELECT-子句(在 问题中提到),其中 returns json 类型的结果。这是我执行 jOOQ 查询的代码:

DSLContext create = DSL.using(connection, SQLDialect.POSTGRES);
Result<Record1<String>> resultR1S = create.select(Routines.getAllOrders()).fetch();
final String strResultFinal = resultR1S.formatJSON(
    new JSONFormat().header(false).recordFormat(RecordFormat.ARRAY)
);

...这是我在控制台上得到的输出(最后被截断了一点,因为结果输出太长而无法容纳):

[["{\"orders\" : [{\"order_id\" : 1, \"total_price\" : 29.98, \"order_date\" : \"2019-08-22T10:06:33\", \"user\" : {\"user_id\" : 1, \"username\" : \"test\"}, \"order_items\" : [{\"order_item_id\" : 1, \"amount\" : 1, \"book\" : {\"book_id\" : 1, \"title\" : \"Harry Potter and the Philosopher's Stone\", \"price\" : 29.98, \"amount\" : 400, \"is_deleted\" : false, \"authors\" : [{\"author_id\":4,\"first_name\":\"JK\",\"last_name\":\"Rowling\"}], \"categories\" : [{\"category_id\":2,\"name\":\"Lyric\",\"is_deleted\":false}]}, \"order_id\" : 1, \"total_order_item_price\" : 29.98}]}, {...}"]]

我想要实现的是摆脱 双尖括号(在输出的开头和结尾) 反斜杠字符 所以它看起来像这样:

{"orders" : [{"order_id" : 1, "total_price" : 29.98, "order_date" : "2019-08-22T10:06:33", "user\" : {"user_id" : 1, "username\" : "test"}, ...]}

我似乎找不到解决这个问题的方法,所以有没有合适的方法通过使用格式JSON(JSON格式)方法...或其他方法来实现?
非常感谢任何 help/advice。

缺少允许 JSON/JSONB 列与 Result.formatJSON() (or of XML columns with Result.formatXML()): https://github.com/jOOQ/jOOQ/issues/10361

结合使用的功能

作为解决方法,您必须自己手动完成这项工作,并避免使用 formatJSON() 方法。

在对适当的 JSON 库进行了一些研究以实现我想要的后,我决定这样做(直到 jOOQ 3.13.1[= 中提供更方便的方法17=]):

String strResultFinal = resultR1S.formatJSON(
        new JSONFormat()
        .header(false)
        .recordFormat(RecordFormat.ARRAY)
);
final String fixedJSONString = strResultFinal
        .substring(3, strResultFinal.length() - 3)
        .replaceAll("\\n", "") // for some reason '\n' is being part of String (I presume for new row) and needs to be removed for proper JSON format... 
        .replaceAll("\\", ""); //...as well as escaping backslash character

现在我得到了想要的 JSON 格式(顺便说一句,它被修剪了 :)):

{"orders" : [{"order_id" : 1, "total_price" : 29.98, "order_date" : "2019-08-22T10:06:33", "user" : {"user_id" : 1, "username" : "test"}, ..}]}