如何使用jq将数字转换为字符串?

AXE*_*abs 57 json

给出以下jq命令和Json:

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

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

three: 3
seven: 7
Run Code Online (Sandbox Code Playgroud)

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

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

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

AXE*_*abs 63

jq命令具有tostring函数.我花了一段时间才学会通过反复试验来使用它.以下是如何使用它:

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

  • 谢谢你非常有帮助,我发现 jq 很难使用并且文档很少,所以这些例子真的很有帮助。 (3认同)

小智 27

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

jq '.[] | .string + ": " + (.number|tostring)' <<< ...
Run Code Online (Sandbox Code Playgroud)

值得注意的是需要周围的parens .number|tostring.


man*_*ork 10

对于这种简单的情况字符串插值的隐式转换为字符串将做到这一点:

.[] | "\( .string ): \( .number )"
Run Code Online (Sandbox Code Playgroud)

jq?play上看到它的实际效果。

  • @Ярослав Рахматуллин,这并不是无用的逃避。这就是 jq 的字符串插值语法。Ruby 有 [`"#{ 1 + 2 }"`](https://tio.run/##KypNqvz/v6C0pFhBKSk1Lb8oVUG5WsFQQVvBSKFWITGtJLVI6f9/AA),Groovy 有 [`"${ 1 + 2 }"`](https:// /tio.run/##Sy/Kzy@r/P@/oCgzr0RDKSk1Lb8oVUGlWsFQQVvBSKFWITGtJLVISfP/fwA),jq 有 [`"\( 1 + 2 )"`](https://tio.run/##yyr8/18pKTUtvyhVIUZDwVBBW8FIQVMhMa0ktUjp/ /9/@QUlmfl5xf918wA)。 (2认同)