【问题标题】:How do I use jq to convert number to string?如何使用 jq 将数字转换为字符串?
【发布时间】:2016-05-23 18:57:10
【问题描述】:

给定以下 jq 命令和 Json:

jq '.[]|[.string,.number]|join(": ")' <<< '
[
  {
    "number": 3,
    "string": "threee"
  },
  {
    "number": 7,
    "string": "seven"
  }
]
'

我正在尝试将输出格式化为:

three: 3
seven: 7

不幸的是,我的尝试导致以下错误:

jq: 错误:无法添加字符串和数字

如何将数字转换为字符串以便两者都可以连接?

【问题讨论】:

    标签: json


    【解决方案1】:

    jq 命令具有tostring 功能。我花了一段时间通过反复试验来学习使用它。使用方法如下:

    jq -r '.[] | [ .string, .number|tostring ] | join(": ")' <<< '
    [{ "number": 9, "string": "nine"},
     { "number": 4, "string": "four"}]
    '
    nine: 9
    four: 4
    

    【讨论】:

    • 感谢您的帮助,我发现 jq 难以使用且文档记录不完善,因此这些示例确实很有帮助。
    【解决方案2】:

    另一种可以说更直观的格式是:

    jq '.[] | .string + ": " + (.number|tostring)' <<< ...
    

    值得注意的是 .number|tostring 周围需要括号。

    【讨论】:

    • 对于我的用例,我必须保留括号来确定优先级。最好将它们保留用于一般用例。
    【解决方案3】:

    对于这种简单的情况,string interpolation 隐式转换为字符串即可:

    .[] | "\( .string ): \( .number )"
    

    jq‣play 上查看它的实际效果。

    【讨论】:

    • @Ярослав Рахматуллин,这不是无用的转义。这就是 jq 的字符串插值语法。 Ruby 有"#{ 1 + 2 }",Groovy 有"${ 1 + 2 }",jq​​ 有"\( 1 + 2 )"
    • 顺便说一句,Swift 有相同的字符串插值语法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    相关资源
    最近更新 更多