【问题标题】:How to parse String to Boolen value in Jsonnet如何在 Json 中将字符串解析为布尔值
【发布时间】:2017-09-15 14:02:47
【问题描述】:

我有一个接受布尔值作为参数的 jsonnet 函数。假设我有一个名为 deploy.jsonnet 的 jsonnet 文件:

function (image='', isReady) {
local config = self,
deploy: if isReady then [ do deployment ]
else [don't do deployment]

我将值传递给这个函数,例如:

jsonnet -A name=new-deployment -A isReady=true deploy.jsonnet

但问题是-A 总是以字符串形式提供值,因此条件检查将失败并显示以下消息:

RUNTIME ERROR: Condition must be boolean, got string.
    ./deploy.jsonnet:(133:45)-(148:15)  object <anonymous>
    During manifestation

我也没有看到将字符串解析为布尔值的选项。

问题是 - 有没有办法将布尔值传递给 jsonnet 中的函数,或者我们可以将字符串解析为布尔值?

【问题讨论】:

    标签: jsonnet


    【解决方案1】:

    是的,可以通过--tla-code(而不是-A),例如:

    jsonnet -A name=new-deployment --tla-code isReady=true deploy.jsonnet
    

    不同的是,它不是将值视为字符串,而是将其视为 jsonnet 代码。所以也可以通过这种方式传递对象、数组甚至函数。

    关于将字符串转换为布尔值。虽然我认为没有内置的方法可以做到这一点,但很容易推出自己的功能:

    local stringToBool(s) =
      if s == "true" then true
      else if s == "false" then false
      else error "invalid boolean: " + std.manifestJson(s);
    

    【讨论】:

    • --tla-code 效果很好,谢谢!是的,已经想出了将字符串转换为布尔值的方法,就像你做的那样。
    【解决方案2】:

    jsonnet 不支持将值提供为布尔值,也不支持将字符串解析为布尔值,因此我将参数类型更改为字符串并进行字符串比较以解决上述布尔解析问题/p>

    function (image='', isReady='') {
    local config = self,
    deploy: if (isReady == 'true') then [ do deployment ]
    else [don't do deployment]
    

    【讨论】:

      猜你喜欢
      • 2011-06-14
      • 2019-02-10
      • 1970-01-01
      • 2012-05-13
      • 2013-08-22
      • 1970-01-01
      • 2021-02-10
      • 2016-11-21
      相关资源
      最近更新 更多