首页 > 解决方案 > JSONiq console.log 或打印

问题描述

是否可以在 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 :)
  |}
};

标签: zorbajsoniq

解决方案


是的:该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 将默认输出到标准错误。

请注意,这是一种声明性语言,因此其trace行为不同于print. 如果不需要,某些表达式可能会被优化掉,在这种情况下它不会生成任何跟踪。例如,

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

可能不会生成跟踪。同样,生成跟踪的顺序可能取决于实现,因为 JSONiq 与 XQuery 一样,让每个引擎都可以自由地评估最佳表达式,只要其结果符合规范即可。


推荐阅读