Оператор JSON
Операторы JSON и JSONTEXT создают свойство, формирующее JSON из списка заданных свойств или, в общем случае, из формы.
Синтаксис
Оператор имеет две формы, обе начинаются с выбора jsonKeyword. Форма, формирующая JSON из списка свойств:
jsonKeyword FROM [columnId1 =] propertyExpr1, ..., [columnIdN =] propertyExprN
[WHERE whereExpr]
[ORDER orderExpr1 [DESC], ..., orderExprL [DESC]]
[TOP topExpr] [OFFSET offsetExpr]
Форма, формирующая JSON из формы:
jsonKeyword ( formName [OBJECTS objName1 = expr1, ..., objNameK = exprK]
[FILTERS filterExpr1, ..., filterExprP]
[TOP topSelect] [OFFSET offsetSelect] )
Где jsonKeyword определяется как:
JSON
JSONTEXT
А topSelect и offsetSelect определяются либо как одно выражение, либо как отображение по группам объектов:
topExpr
topGroupId1 = topPropertyExpr1, ..., topGroupIdT = topPropertyExprT
offsetExpr
offsetGroupId1 = offsetPropertyExpr1, ..., offsetGroupIdF = offsetPropertyExprF
Описание
Операторы JSON и JSONTEXT создают свойство, формирующее JSON либо из списка свойств (форма с FROM), либо из формы. Результат формируется в структурированном виде: формирование JSON из списка свойств является частным случаем формирования JSON из формы, поэтому смысл имён колонок, иерархия групп объектов и структура результата определяются поведением экспорта формы. В отличие от оператора EXPORT, который является действием, записывающим результат в файл, этот оператор является выражением: он возвращает сформированный JSON как значение свойства.
Разница между двумя ключевыми словами заключается в классе возвращаемого значения. JSON возвращает значение класса JSON (файл, содержащий JSON-документ), а JSONTEXT возвращает значение класса JSONTEXT (JSON-документ в виде текста).
При формировании JSON из формы блок OBJECTS фиксирует объекты формы заданными значениями: каждый такой объект ограничивается равенством переданному значению и не участвует в построении иерархии групп объектов. Блок FILTERS добавляет к форме дополнительные условия фильтрации перед формированием.
Параметры
-
jsonKeywordВыбор ключевого слова, определяющий класс результата.
JSONформирует значение классаJSON(файл),JSONTEXTформирует значение классаJSONTEXT(текст). -
propertyExpr1, ..., propertyExprNНепустой список выражений, из значений которых формируется JSON. Каждое выражение соответствует колонке результата.
-
columnId1, ..., columnIdNСписок идентификаторов колонок в результирующем JSON, в которые будут переноситься данные из соответствующего свойства. Каждый элемент списка задается либо простым идентификатором, либо строковым литералом. Если идентификатор не задан, он по умолчанию считается равным
expr<Номер колонки>. -
whereExprВыражение, значение которого является условием формирования. Если не задано, считается равным дизъюнкции всех перечисленных свойств (то есть хотя бы одно из свойств должно быть не
NULL). -
orderExpr1, ..., orderExprLСписок выражений, по которым производится сортировка формируемых данных. Могут использоваться только свойства, присутствующие в списке
propertyExpr1, ..., propertyExprN. -
DESCКлючевое слово. Указывает на обратный порядок сортировки для предшествующего выражения. По умолчанию используется сортировка по возрастанию.
-
formNameИмя формы, из которой формируется JSON. Составной идентификатор.
-
objName1 ... objNameKИмена объектов формы, для которых задаются фиксированные значения. Простые идентификаторы.
-
expr1 ... exprKВыражения, значения которых определяют фиксированные значения для объектов формы.
-
filterExpr1, ..., filterExprPСписок выражений, используемых как дополнительные фильтры, добавляемые к форме перед формированием.
-
topExprВыражение, значение которого ограничивает формирование его первыми записями.
-
topGroupId1 ... topGroupIdTПростые идентификаторы групп объектов формы, для которых ограничение задаётся по группам объектов, а не для всего формирования.
-
topPropertyExpr1 ... topPropertyExprTВыражения, значения которых ограничивают записи соответствующих групп объектов.
-
offsetExprВыражение, значение которого пропускает столько первых записей формирования.
-
offsetGroupId1 ... offsetGroupIdFПростые идентификаторы групп объектов формы, для которых смещение задаётся по группам объектов, а не для всего формирования.
-
offsetPropertyExpr1 ... offsetPropertyExprFВыражения, значения которых задают смещение соответствующих групп объектов.
Примеры
// формирует JSON из списка свойств
MESSAGE JSON FROM code = '1', message = 'OK';
FORM testF
OBJECTS j = INTEGER
PROPERTIES ab = '34'
OBJECTS i = INTEGER
PROPERTIES name = 'Name ' + (i AS INTEGER)
;
run() {
// формирует JSON из формы, фиксируя объект j и добавляя фильтр на объект i
MESSAGE JSON (testF OBJECTS j = 4 FILTERS mod(i, 2) = 0);
}