'How to exclude escape characters from ROOT when using FOR JSON from SQL server

I am trying to create JSON output from SQL Server using FOR JSON. My JSON record is good however I have a number of elements I need in the ROOT section but this is resulting in escape characters which is causing issues.

My select statement is as follows;

SELECT RTRIM(a.ACCNT_CODE) AS ACCOUNT_REF,
       'PK1' AS SUN_DB,
       RTRIM(a.TREFERENCE) AS REFERENCE,
       RTRIM(x.GNRL_DESCR_25) AS ISR_NUMBER,
       '' AS CHECK_DIGIT,
       '' AS PAID_DATE,
       '' AS PAID_FLAG
FROM PK1_A_SALFLDG a
     JOIN PK1_A_SALFLDG_LAD x ON a.ACCNT_CODE = x.ACCNT_CODE
                             AND a.JRNAL_NO = x.JRNAL_NO
                             AND a.JRNAL_LINE = x.JRNAL_LINE
WHERE LEN(RTRIM(x.GNRL_DESCR_25)) > 15
FOR JSON PATH, INCLUDE_NULL_VALUES, ROOT('FORMATCODE":"CHMCT","TYPE":"PA_B4B_AUX_CHMCT_ISRReference","DATA');

But the ROOT is being output as

{"FORMATCODE\\":\"CHMCT\\",\\"TYPE\\":\\"PA_B4B_AUX_CHMCT_ISRReference\\",\\"DATA":[

How can I exclude the backslashes from the ROOT element?



Solution 1:[1]

It seems like you're trying to embed extra JSON data into ROOT. Instead of trying to do that try instead to use a nested JSON query, e.g.:

SELECT
  'CHMCT' as [FORMATCODE],
  'PA_B4B_AUX_CHMCT_ISRReference' as [TYPE],
  (
    SELECT
      RTRIM(a.ACCNT_CODE) AS ACCOUNT_REF,
      'PK1' AS SUN_DB,
      RTRIM(a.TREFERENCE) AS REFERENCE,
      RTRIM(x.GNRL_DESCR_25) AS ISR_NUMBER,
      '' AS CHECK_DIGIT,
      '' AS PAID_DATE,
      '' AS PAID_FLAG
    FROM PK1_A_SALFLDG a
    JOIN PK1_A_SALFLDG_LAD x
      ON a.ACCNT_CODE = x.ACCNT_CODE
      AND a.JRNAL_NO = x.JRNAL_NO
      AND a.JRNAL_LINE = x.JRNAL_LINE
    WHERE LEN(RTRIM(x.GNRL_DESCR_25)) > 15
    FOR JSON PATH, INCLUDE_NULL_VALUES
  ) DATA
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER;

Which will yield output similar to...

{
    "FORMATCODE": "CHMCT",
    "TYPE": "PA_B4B_AUX_CHMCT_ISRReference",
    "DATA": [
        {
            "ACCOUNT_REF": "...",
            "SUN_DB": "PK1",
            "REFERENCE": "...",
            "ISR_NUMBER": "...",
            "CHECK_DIGIT": "",
            "PAID_DATE": "",
            "PAID_FLAG": ""
        }
    ]
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 AlwaysLearning