Пояснения:
Я не уверен, что это точный ответ на ваш вопрос, но он слишком длинный для комментария. Важно отметить, что FOR JSON PATH
возвращает различное содержимое JSON в зависимости от параметров ROOT
и WITHOUT_ARRAY_WRAPPER
. В следующей таблице показан другой вывод JSON:
-----------------------------------------------------------------------------------------------------
|Statement | Result |
-----------------------------------------------------------------------------------------------------
| SELECT | [{"colA":"stuff","colB":"stuff","colC":"stuff"}] |
| 'stuff' AS colA, | JSON array |
| 'stuff' AS colB, | |
| 'stuff' AS colC | |
| FOR JSON PATH | |
-----------------------------------------------------------------------------------------------------
| SELECT | {"colA":"stuff","colB":"stuff","colC":"stuff"} |
| 'stuff' AS colA, | JSON object |
| 'stuff' AS colB, | |
| 'stuff' AS colC | |
| FOR JSON PATH, WITHOUT_ARRAY_WRAPPER | |
-----------------------------------------------------------------------------------------------------
| SELECT | {"root":[{"colA":"stuff","colB":"stuff","colC":"stuff"}]} |
| 'stuff' AS colA, | JSON object |
| 'stuff' AS colB, | |
| 'stuff' AS colC | |
| FOR JSON PATH, ROOT('root') | |
-----------------------------------------------------------------------------------------------------
Итак, если вы хотите добавить содержимое в строку JSON, используя JSON_MODIFY()
, вам необходимо использовать соответствующую комбинацию path
выражение и модификатор append
.
Добавить содержимое к JSON тексту, созданному с помощью FOR JSON PATH
:
DECLARE @jsonResponse nvarchar(max)
SELECT @jsonResponse = (
SELECT 'stuff' AS colA, 'stuff' AS colB, 'stuff' AS colC
FOR JSON PATH
)
SELECT @jsonResponse = JSON_MODIFY(
@jsonResponse,
'append $',
'some more stuff'
)
Результат:
[{"colA":"stuff","colB":"stuff","colC":"stuff"},"some more stuff"]
Добавить содержимое в текст JSON, созданный с помощью модификаторов FOR JSON PATH
, WITHOUT_ARRAY_WRAPPER
и append
:
DECLARE @jsonResponse nvarchar(max)
SELECT @jsonResponse = (
SELECT 'stuff' AS colA, 'stuff' AS colB, 'stuff' AS colC
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
)
SELECT @jsonResponse = JSON_MODIFY(
@jsonResponse,
'append $."Added Stuff"',
'some more stuff'
)
Результат:
{"colA":"stuff","colB":"stuff","colC":"stuff","Added Stuff":["some more stuff"]}
Добавить содержимое к JSON тексту, созданному с FOR JSON PATH
, WITHOUT_ARRAY_WRAPPER
и без модификатора append
:
DECLARE @jsonResponse nvarchar(max)
SELECT @jsonResponse = (
SELECT 'stuff' AS colA, 'stuff' AS colB, 'stuff' AS colC
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
)
SELECT @jsonResponse = JSON_MODIFY(
@jsonResponse,
'$."Added Stuff"',
'some more stuff'
)
Результат:
{"colA":"stuff","colB":"stuff","colC":"stuff","Added Stuff":"some more stuff"}
Добавить содержимое к JSON тексту, созданному с помощью FOR JSON PATH
и ROOT
:
DECLARE @jsonResponse nvarchar(max)
SELECT @jsonResponse = (
SELECT 'stuff' AS colA, 'stuff' AS colB, 'stuff' AS colC
FOR JSON PATH, ROOT('root')
)
SELECT @jsonResponse = JSON_MODIFY(
@jsonResponse,
'append $."Added Stuff"',
'some more stuff'
)
Результат:
{"root":[{"colA":"stuff","colB":"stuff","colC":"stuff"}],"Added Stuff":["some more stuff"]}