С SQL 2017 - OPEN JSON удаляет escape-последовательности из необработанных JSON данных - PullRequest
0 голосов
/ 05 августа 2020

SQL pro c потребляет JSON полезную нагрузку из веб-службы, но данные были экранированы перед получением в процедуре. У меня есть такая полезная нагрузка:

{
    "RES_NBR_ID": "00000056566",
    "RES_SCRIPT_NM": "Test Script",
    "RES_SCRIPT_ID": "jcet2",
    "RES_RESULT_GROUP_ID": 42622528,
    "RES_CREATED_BY_ID": "Jcccc",
    "RES_QUESTION_TXT": "asdf",
    "RES_ANSWER_TXT": "asdfa\"asfasf",
    "SORT_NBR": 4,
    "RES_QUESTION_ID": 4,
    "RES_DELETED_BY_ID": ""
}

Вы заметите, что ANSWER_TXT на самом деле asdfa "asfasf Backsla sh был вставлен функцией JSON .stringify в службе

Таким образом, команда OPEN JSON, как показано ниже, удалит все последовательности stringfy:

SELECT (SELECT MAX(RES_ID) FROM SCRT_RESULTS) + ROW_NUMBER() OVER(ORDER BY RES_QUESTION_TXT) AS RES_ID
,RES_NBR_ID
,RES_SCRIPT_NM
,RES_QUESTION_TXT
,RES_ANSWER_TXT
,RES_CREATED_BY_ID
,getdate() [RES_CREATED_DT]
,RES_DELETED_BY_ID
,getdate() [RES_DELETED_DT]
,RES_RESULT_GROUP_ID
,RES_SORT_NBR
,RES_SCRIPT_ID
,RES_QUESTION_ID
,getUTCdate() [RES_CREATED_UTC_DT]
 from openjson(@json_result) 
WITH(
     RES_NBR_ID     varchar(16)
    ,RES_SCRIPT_NM          varchar(150) 
    ,RES_SCRIPT_ID          varchar(5) 
    ,RES_RESULT_GROUP_ID    bigint 
    ,RES_CREATED_BY_ID      varchar(20)  
    ,RES_QUESTION_TXT       varchar(2000)  
    ,RES_ANSWER_TXT         varchar(2000) 
    ,RES_SORT_NBR           int 
    ,RES_QUESTION_ID        int 
    ,RES_DELETED_BY_ID      varchar(20) 

 )
...