Файл JSON должен иметь одну из следующих структур:
-
простой список строк (Рисунок «Источник типа JSON из простого списка строк»):
[
{..},
{..}
]
В данной структуре файла одна таблица (Рисунок «Источник типа JSON из простого списка строк»). По умолчанию наименование таблицы default, поэтому в модели необходимо обращаться к таблице default. Например: SELECT * FROM `default`;
-
несколько вложенных таблиц (Рисунок «Источник типа JSON из нескольких вложенных таблиц»):
{
"table 1": [{..}, {..}],
"table 2": [{..}, {..}],
}
В модели обращение к этим таблицам делаются по именам из ключей словаря верхнего уровня. Например: SELECT * FROM `table1` INNER JOIN `table2` ON `table1`.`id1`=`table2`.`id2`.
Условия и ограничения:
-
в загружаемом файле не должно быть столбцов с одинаковыми наименованиями (к одинаковым наименованиям также относятся поля типа «код» и «kod», т.к. при создании модели для поля «код» сформируется наименование на латинице – «kod», что приведет к дублированию полей в таблице);
-
кодировка файла должна быть UTF–8;
-
если значение состоит только из пробелов, и тип столбца – не строковый, то значение будет пустым (null – для чисел и дат, false – для булевого типа);
-
значения с типом строка и дата указываются в кавычках;
-
числа и булевы значения должны быть представлены соответствующими литералами в JSON (а не строками с текстовыми представлениями);
-
целые числа – последовательность десятичных цифр, без разделителей;
-
вещественные числа – точка в качестве десятичного разделителя, не поддерживается экспоненциальная нотация (1.23e2 = 123);
-
булевые значения – true, false (регистрозависимо);
-
значение в форматах, перечисленных в таблице выше (см. Таблица «Форматы и примеры значений»), определяется как тип datetime64[ns, UTC];
-
начальные и конечные пробелы в строках игнорируются. Пустая строка не является датой (для NULL-даты должен использоваться JSON-литерал null).
Описание особенностей обработки часового пояса:
-
если исходное значение даты со временем было без часового пояса – то в БД сохраняется именно это значение;
-
если исходное значение даты со временем было с часовым поясом – то преобразуется в UTC перед сохранением в БД (в БД сохраняется также без часового пояса);
-
на уровне внутренних контрактов между источниками данных: данные передаются как значение, привязанное к UTC, при сохранении в БД привязка к UTC не учитывается.