如何在 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"}, ..}]}
我在使用 jOOQ 代码生成器查询 生成的例程 时,无法正确格式化我的 JSON 结果。我正在尝试对 PL/pgSQL 中定义的 get_all_orders()
方法执行 SELECT-子句(在 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"}, ..}]}