JSON_MODIFY добавляет переменную, содержащую JSON с escape-символами вместо строки JSON - PullRequest
0 голосов
/ 08 мая 2018

Я добился некоторого успеха, используя JSON_MODIFY для добавления fieldErrors: [] и его содержимого к корню другого объекта { data: []}, так что результирующий объект выглядит примерно так: {data: [], fieldErrors: []}.

Проблема в том, что когда я добавляю @variable, он включает в себя несколько escape-символов.

Я ожидаю этого: {"name":"PosTitle","status":"the field is messed up, yo"}

НО, я получаю это: ["{\"name\":\"PosTitle\",\"status\":\"the field is messed up, yo\"}"]}

    DECLARE
        @fieldErrors nvarchar(max) ='{}'
        ,@jsonResponse nvarchar(max) = '
    {
        "data": [
            {
                "PosTitle": "",
                "PosCode": "86753",
            }
        ]
    }
    '

    --define the fields that are bad
    set @fieldErrors = JSON_MODIFY(JSON_MODIFY(@fieldErrors, '$.name', 'PosTitle'), '$.status', 'the field is messed up, yo')
    print @fieldErrors

    --RESULT, this looks great:
    --{"name":"PosTitle","status":"the field is messed up, yo"}



    -- append fieldErrors to the response

    set @jsonResponse = JSON_MODIFY(@jsonResponse, 'append $.fieldErrors', @fieldErrors)
    print @jsonResponse

    --RESPONSE, this includes escape characters
/*
    {
        "data": [
            {
                "PosTitle": "",
                "PosCode": "86753",

            }
        ]
    ,"fieldErrors":["{\"name\":\"PosTitle\",\"status\":\"the field is messed up, yo\"}"]}


*/

Почему экранирующие символы добавляются при добавлении fieldErrors к ответу?

1 Ответ

0 голосов
/ 09 мая 2018

Пожалуйста, удалите запятую в конце "PosCode": "86753",, так как это недопустимый JSON.

Чтобы ответить на ваш вопрос, вы пытаетесь добавить строку, хранящуюся в @fieldErrors, что приводит к добавлению escape-символов.

Вместо этого, set @jsonResponse = JSON_MODIFY(@jsonResponse, '$.fieldErrors', JSON_QUERY(@fieldErrors)) должно дать результаты, которые вы ищете.

Обратите внимание, что когда вы используете append, вы говорите JSON_MODIFY, что он добавляет значение в массив (что может или не может быть тем, что вам нужно, но не то, что вы написали, что вы ожидаете).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...