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


73

给定以下jq命令和Json:

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

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

three: 3
seven: 7

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

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

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

Answers:


75

jq命令具有tostring函数。我花了一段时间才学会反复尝试使用它。使用方法如下:

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

3
谢谢您的帮助,我发现jq难以使用且文档记录不多,因此这些示例确实有用。
长发叔叔

44

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

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

值得一提的是需要周围的地方.number|tostring


对于我的用例,我必须保留括号以优先处理事情。最好将它们保留为一般用例。
SebMa '20


-1

使用“ map_values”操作符来修改对象

{“ foo”:{“ bar”:3}}

.foo.bar = .foo.bar | map_values(tostring)

输出量

{“ foo”:{“ bar”:“ 3”}}

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.