Как выбрать JSON_VALUE, если имя объекта содержит одинарную кавычку?

Я пытаюсь получить значение из некоторого JSON в таблице. Это мой запрос:

Select JSON_VALUE(JSON_Data, '$.Person's_ID') FROM Table 

Чтобы попытаться получить значение для идентификатора человека. Это (часть) JSON, хранящийся в столбце JSON_Data:

"Person's_ID": "Test"

Я попытался использовать две одинарные кавычки, но это все равно дает ошибку:

Путь JSON неправильно отформатирован. Неожиданный символ '''находится в позиции 8 ".

Использование обратной косой черты для экранирования одинарной кавычки также не работает.

1 ответ

Это может быть хорошим уроком, чтобы не создавать мусор JSON (и проверять его перед вставкой в ​​базу данных), поскольку, согласно стандарту, одинарная кавычка не является допустимым символом в имени объекта.:-)

Вы можете попробовать этот тип замены, но производительность будет довольно крутой, и она заменит все экземпляры Person's_IDа не только когда он выглядит как объект:

SELECT JSON_VALUE(REPLACE(JSON_Data,'Person''s_ID','Person_s_ID'), '$.Person_s_ID')
  FROM dbo.Table;

Рабочий пример:

DECLARE @d varchar(255) = '{"Person''s_ID": "Test"}';
SELECT JSON_VALUE(REPLACE(@d,'Person''s','Person_s'), '$.Person_s_ID');

Результат:

Test
Другие вопросы по тегам