I have this JSON:
{
"environments": [
{
"environment": "Development",
"customs": {
"FieldA": "FieldA_Dev",
"FieldB": "FieldB_Dev",
"FieldC": "FieldC_Dev"
}
},
{
"environment": "Test",
"customs": {
"FieldA": "FieldA_Test",
"FieldB": "FieldB_Test",
"FieldC": "FieldC_Test"
}
},
{
"environment": "Production",
"customs": {
"FieldA": "FieldA_Prod",
"FieldB": "FieldB_Prod",
"FieldC": "FieldC_Prod"
}
}
],
"customMetadata": [
{
"name": "FieldA",
"default": "FieldA_Default",
"description": "FieldA_Description"
},
{
"name": "FieldB",
"default": "FieldB_Default",
"description": "FieldB_Description"
},
{
"name": "FieldC",
"default": "FieldC_Default",
"description": "FieldC_Description"
}
]
}
I am trying to build a SQL table like this:
CREATE TABLE #TempTable
(
[Name] NVARCHAR(255),
[Default] NVARCHAR(255),
[Description] NVARCHAR(255),
[Development] NVARCHAR(255),
[Test] NVARCHAR(255),
[Production] NVARCHAR(255)
);
And then map the values from the JSON file.
I can do the initial metadata insert with:
INSERT INTO #TempTable ([Name], [Default], [Description], [Development], [Test], [Production])
SELECT
[name] AS [Name],
[default] AS [Default],
[description] AS [Description],
NULL AS [Development],
NULL AS [Test],
NULL AS [Production]
FROM
OPENJSON(@json, '$.customMetadata')
WITH (
[name] NVARCHAR(255) '$.name',
[default] NVARCHAR(255) '$.default',
[description] NVARCHAR(255) '$.description'
);
But afterwards to map each of the environments' values into the table, I get stuck.
Please help.
I have tried with OPENJSON
and CROSS APPLY JSON
, and AI tool assistance, but just cannot get it right.
"customMetadata"
part of the parsed JSON with"name"
equal to"FieldB"
?