如何在 jsonnet 中打印?

How to printf in jsonnet?

有没有办法打印jsonnet中的对象?这主要用于调试目的。

我正在使用 error 来打印对象,但这会终止程序执行。

local obj = [
{
  myKey: 2,
}];
error 'Printing' + std.toString(obj)

输出:

RUNTIME ERROR: Printing[{"myKey": 2}]
    snippet:6:1-37  

更好的方法?

[已过时,请参阅其他答案]

目前(从 jsonnet 0.10 开始)不幸的是没有。有计划将其包含在未来的版本中(此处发布:https://github.com/google/jsonnet/issues/130)。

人们使用错误(就像您在代码中显示的那样)或修改代码以仅输出他们想要的部分(它有多方便取决于您如何构建代码)。

为了后代,OP 贡献了一个新函数来解决这个问题:std.trace("message", rest).

为了跟进 Dave Cunningham 的回答,std.trace() is available since 0.11.0,它的行为类似于 "hook in the middle",其中第一个参数是您要显示的字符串,第二个是您想要显示的字符串 return.

将其用于提供的示例:

$ cat foo.jsonnet
local obj = [
{
    myKey: 2,
}];
std.trace("obj content: %s" % [obj], obj)

$ jsonnet foo.jsonnet 
TRACE: foo.jsonnet:5 obj content: [{"myKey": 2}]
[
   {
      "myKey": 2
   }
]