JSONiq console.log или распечатать - PullRequest
0 голосов
/ 22 мая 2018

Можно ли печатать на консоли для отладки в сценарии JSONiq / Zorba?

например

declare function utils:lowerCaseKey($obj as item) as item{
   print($obj)
  {|
    for $k in  distinct-values(keys( $obj ))
    return { lower-case($k) : $obj.$k } (: note the ',' to create a sequence :)
  |}
};

1 Ответ

0 голосов
/ 23 мая 2018

Да: функция trace служит для этой цели.Его можно вызывать для любого выражения, для которого необходимо просмотреть выходные данные, вместе с выбранной меткой.

declare function utils:lowerCaseKey($obj as item) as item
{
  {|
    for $k in  distinct-values(keys( trace($obj, "obj") ))
    return { lower-case($k) : $obj.$k }
    (: note the ',' to create a sequence :)
  |}
};

Это приведет к выводу, например:

obj [1]: { "foo" : "bar" }
obj [2]: { "foo" : "bar2" }

Гдеточно (в командной строке, в файле журнала ...) этот вывод должен быть задокументирован в каждом движке.Zorba по умолчанию выведет в stderr.

Обратите внимание, что это декларативный язык, поэтому trace ведет себя не так, как print.Некоторые выражения могут быть оптимизированы, если они не нужны, и в этом случае они не генерируют никаких следов.Например,

(1, trace(2, "foo"))[1]

может не генерировать трассировку.Аналогично, порядок, в котором генерируются трассы, может зависеть от реализации, поскольку JSONiq, как и XQuery, оставляет каждому механизму свободу в том, как наилучшим образом оценить выражение, если его результаты соответствуют спецификации.

...