Как выбрать 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