Перейти к основному содержимому
Версия: 7.0

Оператор 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);
}