Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Ошибка при конвертации JSON в таблицу  [new]
FrozenByte
Member

Откуда:
Сообщений: 6
Всем привет!
Пробую JSON в SQL Server 2016.
Написал такой тестовый скрипт:
declare @json nvarchar(max) =
'
[
    {
        "Дата": "01.04.2017",
	"ФИО": "Иванов"
    }
]
';

select *
from openjson(@json)
with
(
    Дата nvarchar(max) '$.Дата',
    ФИО nvarchar(max) '$.ФИО'
);


Выходит ошибка: JSON path is not properly formatted. Unexpected character 'Д' is found at position 2.
Меняем JSON:
declare @json nvarchar(max) =
'
[
    {
        "Date": "01.04.2017",
	"FIO": "Иванов"
    }
]
';

select *
from openjson(@json)
with
(
    Дата nvarchar(max) '$.Date',
    ФИО nvarchar(max) '$.FIO'
);

Всё ОК!
В первом случае почему-то не читаются русские буквы! Читаем документацию:
column_path... The comparison used to match path steps with the properties of the JSON expression is case-sensitive and collation-unaware (that is, a BIN2 comparison).
Это баг? Или я что-то пропустил? :)

P.S. SQL Server 2016 (SP1-CU3) (KB4019916) - 13.0.4435.0 (X64) Copyright (c) Microsoft Corporation Developer Edition (64-bit).
3 июн 17, 16:46    [20537079]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при конвертации JSON в таблицу  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31354
FrozenByte
Или я что-то пропустил? :)
А почему у вас тип nvarchar, а пишите туда строку varchar? Где N? (и в openjson тоже)
3 июн 17, 17:12    [20537103]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при конвертации JSON в таблицу  [new]
FrozenByte
Member

Откуда:
Сообщений: 6
@alexeyvg

Не работает:
declare @json nvarchar(max) =
N'
[
    {
        "Дата": "01.04.2017",
	"ФИО": "Иванов"
    }
]
';

select *
from openjson(@json)
with
(
    Дата nvarchar(max) '$.Дата',
    ФИО nvarchar(max) '$.ФИО'
);


Без path работает:
declare @json nvarchar(max) =
N'
[
    {
        "Дата": "01.04.2017",
	"ФИО": "Иванов"
    }
]
';

select *
from openjson(@json)
with
(
    Дата nvarchar(max),
    ФИО nvarchar(max)
);
3 июн 17, 17:28    [20537112]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при конвертации JSON в таблицу  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31354
FrozenByte
Не работает:
Я же написал - и в openjson тоже.
select *
from openjson(@json)
with
(
    Дата nvarchar(max) N'$.Дата',
    ФИО nvarchar(max) N'$.ФИО'
);
3 июн 17, 17:58    [20537135]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при конвертации JSON в таблицу  [new]
FrozenByte
Member

Откуда:
Сообщений: 6
@alexeyvg
Не работает. Вы тестировали скрипт?
declare @json nvarchar(max) =
N'
[
    {
        "Дата": "01.04.2017",
	"ФИО": "Иванов"
    }
]
';

select *
from openjson(@json)
with
(
    Дата nvarchar(max) N'$.Дата',
    ФИО nvarchar(max) N'$.ФИО'
);
3 июн 17, 18:55    [20537170]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при конвертации JSON в таблицу  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31354
FrozenByte
Не работает. Вы тестировали скрипт?

select *
from openjson(@json)
with
(
    Дата nvarchar(max) N'$."Дата"',
    ФИО nvarchar(max) N'$."ФИО"'
);
3 июн 17, 19:28    [20537204]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при конвертации JSON в таблицу  [new]
FrozenByte
Member

Откуда:
Сообщений: 6
@alexeyvg
Спасибо, заработало! А в чём было дело? :)
3 июн 17, 19:31    [20537207]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при конвертации JSON в таблицу  [new]
FrozenByte
Member

Откуда:
Сообщений: 6
Нашёл ответ здесь:
Reference keys that contain non-alphanumeric characters in JSON text

Question. I have non-alphanumeric characters in keys in my JSON text. How can I reference these properties?
Answer. You have to surround them with quotes in JSON paths. For example, JSON_VALUE(@json, '$."$info"."First Name".value').

То есть русские символы не являются "alphanumeric", поэтому их надо брать в кавычки.
3 июн 17, 19:36    [20537212]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при конвертации JSON в таблицу  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31354
FrozenByte
Нашёл ответ здесь:
Reference keys that contain non-alphanumeric characters in JSON text

Question. I have non-alphanumeric characters in keys in my JSON text. How can I reference these properties?
Answer. You have to surround them with quotes in JSON paths. For example, JSON_VALUE(@json, '$."$info"."First Name".value').

То есть русские символы не являются "alphanumeric", поэтому их надо брать в кавычки.
Да, был похожий пример с именами в квадратных скобках. Вот такая особенность.
3 июн 17, 20:12    [20537251]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить