Вопрос или проблема
Как разрешить специальные символы в JSON_VALUE
У меня есть таблица с колонкой VARCHAR, которую я использую как JSON. В колонке находятся следующие данные: {"Key-Name": "A value."}
.
Если я использую JSON_VALUE для фильтрации по этой колонке в запросе ниже, я получаю следующую ошибку: “Путь JSON неправильно отформатирован. Неожиданный символ ‘-‘ найден на позиции 5.”.
SELECT *
FROM [MyTable]
WHERE JSON_VALUE([Value], N'$.Key-Name') = 'A value'
Как я могу получить значения с помощью функции JSON_VALUE, когда в ключах есть специальные символы?
Вы можете использовать двойные кавычки, чтобы экранировать имя ключа:
SELECT *
FROM [MyTable]
WHERE JSON_VALUE([Value], N'$."Key-Name"') = 'A value'
Ответ или решение
Для того чтобы использовать функцию JSON_VALUE в SQL Server и корректно извлекать значения из JSON-строк, в случаях, когда ключи содержат специальные символы, необходимо использовать двойные кавычки для экранирования имени ключа.
В вашем случае, у вас есть следующий пример JSON:
{"Key-Name": "A value."}
При попытке фильтрации по этому ключу с помощью запроса:
SELECT *
FROM [MyTable]
WHERE JSON_VALUE([Value], N'$.Key-Name') = 'A value'
вы столкнетесь с ошибкой: "JSON path is not properly formatted. Unexpected character ‘-‘ is found at position 5." Это происходит из-за того, что символ -
не является допустимым символом в пути JSON без экранирования.
Чтобы решить эту проблему, вам необходимо использовать двойные кавычки вокруг имени ключа, содержащего специальные символы. Вот как будет выглядеть исправленный запрос:
SELECT *
FROM [MyTable]
WHERE JSON_VALUE([Value], N'$.["Key-Name"]') = 'A value.'
Обратите внимание на то, что ключ "Key-Name" окружен двойными кавычками и квадратными скобками. Это позволяет правильно интерпретировать ключи с символами, которые могут вызвать проблемы при использовании стандартного синтаксиса.
Таким образом, используя данный подход, вы сможете корректно извлекать значения из JSON-строк, даже если ключи содержат специальные символы.