diff --git a/jOOQ/src/main/java/org/jooq/JSONArrayNullStep.java b/jOOQ/src/main/java/org/jooq/JSONArrayNullStep.java
new file mode 100644
index 0000000000..a7e0c69b25
--- /dev/null
+++ b/jOOQ/src/main/java/org/jooq/JSONArrayNullStep.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Other licenses:
+ * -----------------------------------------------------------------------------
+ * Commercial licenses for this work are available. These replace the above
+ * ASL 2.0 and offer limited warranties, support, maintenance, and commercial
+ * database integrations.
+ *
+ * For more information, please visit: http://www.jooq.org/licenses
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ */
+package org.jooq;
+
+// ...
+// ...
+import static org.jooq.SQLDialect.H2;
+import static org.jooq.SQLDialect.MARIADB;
+import static org.jooq.SQLDialect.MYSQL;
+// ...
+import static org.jooq.SQLDialect.POSTGRES;
+// ...
+
+import org.jooq.impl.DSL;
+
+/**
+ * A step in the construction of {@link DSL#jsonArray(Field...)} or
+ * {@link DSL#jsonbArray(Field...)} functions where the NULL clause
+ * can be defined.
+ *
+ * @author Lukas Eder
+ */
+public interface JSONArrayNullStep extends Field {
+
+ /**
+ * Include NULL values in output JSON.
+ */
+ @Support({ H2, MARIADB, MYSQL, POSTGRES })
+ Field nullOnNull();
+
+ /**
+ * Exclude NULL values in output JSON.
+ */
+ @Support({ H2, POSTGRES })
+ Field absentOnNull();
+}
diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java
index 74986d4b6d..eab3d4ff38 100644
--- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java
+++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java
@@ -425,6 +425,7 @@ import org.jooq.InsertValuesStepN;
import org.jooq.JSON;
import org.jooq.JSONArrayAggNullStep;
import org.jooq.JSONArrayAggOrderByStep;
+import org.jooq.JSONArrayNullStep;
import org.jooq.JSONEntry;
import org.jooq.JSONObjectAggNullStep;
import org.jooq.JSONObjectNullStep;
@@ -6677,8 +6678,26 @@ final class ParserImpl implements Parser {
}
private static final Field> parseFieldJSONArrayConstructorIf(ParserContext ctx) {
- if (parseKeywordIf(ctx, "JSON_ARRAY"))
- return DSL.jsonArray(parseFieldsOrEmptyParenthesised(ctx));
+ if (parseKeywordIf(ctx, "JSON_ARRAY")) {
+ parse(ctx, '(');
+
+ List> result = null;
+ JSONNullClause nullClause = parseJSONObjectNullClauseIf(ctx);
+
+ if (nullClause == null) {
+ result = parseFields(ctx);
+ nullClause = parseJSONObjectNullClauseIf(ctx);
+ }
+
+ parse(ctx, ')');
+
+ JSONArrayNullStep a = result == null ? DSL.jsonArray() : DSL.jsonArray(result);
+ return nullClause == NULL_ON_NULL
+ ? a.nullOnNull()
+ : nullClause == ABSENT_ON_NULL
+ ? a.absentOnNull()
+ : a;
+ }
return null;
}