0

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
jarlh
  • 42,561
  • 8
  • 45
  • 63
jishan siddique
  • 1,848
  • 2
  • 12
  • 23

0 Answers0