Json 如何用JQ填充数字?

Json 如何用JQ填充数字?,json,jq,zero-padding,Json,Jq,Zero Padding,我想给数字中的字符串添加前导/尾随零-结果字符串需要包含“01”或“001”,而不是“1”。我注意到项目https://github.com/joelpurra/jq-zeros但是我已经从package manager(dnf,fedora)安装了jq,所以一些jqnpm的要求对我来说是不可行的(乍一看),更不用说我对npm的恐惧了,因为stuffsudo npm-g已经多次破坏了我的系统 问题: jq的这些包经理,他们是否正在被主流接受 填充本身-如何在没有这个额外库的情况下进行填充 鉴于此

我想给数字中的字符串添加前导/尾随零-结果字符串需要包含“01”或“001”,而不是“1”。我注意到项目
https://github.com/joelpurra/jq-zeros
但是我已经从package manager(dnf,fedora)安装了jq,所以一些
jqnpm
的要求对我来说是不可行的(乍一看),更不用说我对npm的恐惧了,因为stuff
sudo npm-g
已经多次破坏了我的系统

问题:

  • jq的这些包经理,他们是否正在被主流接受
  • 填充本身-如何在没有这个额外库的情况下进行填充

  • 鉴于此JSON文档:

    7
    
    您可以使用以下过滤器实现
    “007”
    :(或
    “042”
    使用
    42

  • tostring
    7
    转换为
    “7”
  • 如果数字有3个或更多数字,则将填充设置为
    ,否则设置为
    “0”*(3-长度)
    。(当一个字符串乘以一个数字时,它会重复多次,例如,
    “foo”*3
    ->
    “foooo”
  • 并将数字追加到末尾

  • 您可以在过滤器的开头定义这些函数,或者将其添加到
    ~/.jq
    文件中,然后使用它填充数字

    def pad_left($len; $chr):
        (tostring | length) as $l
        | "\($chr * ([$len - $l, 0] | max) // "")\(.)"
        ;
    def pad_left($len):
        pad_left($len; " ")
        ;
    
    然后使用它用三个
    0
    s填充值:

    pad_left(3; "0")
    

    根据jq-esque的定义:

    至于jq模块经理,jq的官方开发管道中没有任何内容,但jqnpm与npm无关,而且使用起来非常安全,至少如果您不使用sudo的话

    pad_left(3; "0")
    
    def lpad(n):
      tostring
      | if (n > length) then ((n - length) * "0") + . else . end;