Required output:
{
"en-US": [
{
"pagename": {
"login": "login text",
"register": "dsc"
},
"page2": {
"detail": "login text",
"profile": "dsc"
}
}
],
"fr-FR": [
{
"pagename": {
"login": "login text",
"register": "dsc"
}
}
]
}
Currently getting:
[
{
"Code": "en",
"pages": [
{
"Name": "page12",
"pagedatakey": [
{
"key": "EmailAddres",
"valuesdata": [
{
"Value": "Email en"
},
{
"Value": "Email nl"
},
{
"Value": "tesenene"
},
{
"Value": "SCRIPT value"
}
],
/* Other keys*/
}
]
}
]
},
{
"Code": "nl",
"pages": [
{
"Name": "Registration",
"pagedatakey": [
{
"key": "EmailAddres",
"valuesdata": [
{
"Value": "Email en"
},
{
"Value": "Email nl"
},
{
"Value": "tesenene"
},
{
"Value": "SCRIPT value"
}
]
}
],
/* Other keys*/
}
]
}
]
This is my query I'm using:
DECLARE @JsonData VARCHAR(MAX) =(
SELECT linfo.Code,
(
SELECT RTE.[Name],
(
SELECT RT.[key],
(
SELECT RTV.[Value] FROM ResourceTranslationValues AS RTV
WHERE rtv.ResourceTranslationId = rt.Id
FOR JSON PATH
) AS valuesdata
FROM ResourceTranslationValues AS RTV
INNER JOIN resourcetranslation AS RT ON RT.Id = RTV.ResourceTranslationId
FOR JSON PATH
) AS pagedatakey
FROM ResourceTranslationValues AS RTV
INNER JOIN ResourceTranslationEntity AS RTE ON RTE.Id = RTV.ResourceTranslationEntityId
GROUP BY RTE.[Name]
FOR JSON PATH
) AS [pages]
FROM ResourceTranslationValues AS RTV
INNER JOIN LanguageInfo AS Linfo ON Linfo.Id = RTV.LanguageInfoId
WHERE linfo.Id IN (1,2)
GROUP BY linfo.code
FOR JSON PATH)
SELECT @JsonData [Data];
I want to format data in the given required format at the top
tried to apply JSON_VALUE()
it returns only 1 value.
I also tried to extract values against key using OPENJSON
and insert into temp table but no luck.
DECLARE @ListOdata TABLE(Keys NVARCHAR(MAX),translatonvalues NVARCHAR(MAX) )
INSERT INTO @ListOdata
VALUES (
(SELECT [Key]
FROM OPENJSON( (SELECT @JsonData [Data]) , '$.pagedatakey' )
WITH ([Key] NVARCHAR(25) '$.key')),(SELECT [Value]
FROM OPENJSON( @JsonData, '$.valuesdata' )
WITH ([Value] NVARCHAR(25) '$.Value')) )
SELECT * FROM @ListOdata