Embedded SQL can insert an Element into each Array Element, but the code feels troublesome. After adding inserting the Element into each Array member, I must CONCAT() brackets back into the output, to once again restore the Array.
PRINT @@VERSION;
DECLARE @ArrayJSON NVARCHAR(MAX) = '[{"BookName":"First Book", "Order": 1},{"BookName":"Second Book", "Order": 2}]';
DECLARE @ObjectJSON NVARCHAR(MAX) = '{"Page":1,"Chapter":2}';
PRINT CONCAT('@ArrayJSON = ',@ArrayJSON );
PRINT CONCAT('@ObjectJSON = ',@ObjectJSON);
DECLARE @FinalJSON NVARCHAR(MAX);
WITH [ParsedOriginal] AS
(
SELECT [Element] = JSON_MODIFY([value], '$.Params', JSON_QUERY(@ObjectJSON)) FROM OPENJSON(@ArrayJSON)
)
SELECT @FinalJSON = (SELECT [Elements] = STRING_AGG([Element], ',')FROM [ParsedOriginal]);
SET @FinalJSON = CONCAT('[', @FinalJSON,']');
PRINT CONCAT('@FinalJSON = ',@FinalJSON);
And here is the output:
Microsoft SQL Server 2019 (RTM-CU25-GDR) (KB5036335) - 15.0.4360.2 (X64)
@ArrayJSON = [{"BookName":"First Book", "Order": 1},{"BookName":"Second Book", "Order": 2}]
@ObjectJSON = {"Page":1,"Chapter":2}
@FinalJSON = [{"BookName":"First Book", "Order": 1,"Params":{"Page":1,"Chapter":2}},{"BookName":"Second Book", "Order": 2,"Params":{"Page":1,"Chapter":2}}]
Can this solution be improved to avoid STRING functions, and rely more on JSON functions?