【问题标题】:Printing multiple values on the same line在同一行打印多个值
【发布时间】:2018-02-18 06:43:36
【问题描述】:

我正在尝试解析 JSON 文档并在同一行打印几个值。有没有办法取以下文件:

{
  "fmep": {
    "foo": 112,
    "bar": 234324,
    "cat": 21343423
  }
}

然后吐出来:

112 234324

我可以得到我想要的值,但它们打印在不同的行上:

$ echo '{ "fmep": { "foo": 112, "bar": 234324, "cat": 21343423 } }' | jq '.fmep|.foo,.bar'

112  
234324

如果某处有示例说明如何执行此操作,我将不胜感激。

【问题讨论】:

    标签: json jq


    【解决方案1】:

    在您的示例中,最简单的方法是使用 String Interpolation-r 选项。例如

    echo '{ "fmep": { "foo": 112, "bar": 234324, "cat": 21343423 } }' | \
    jq -r '.fmep| "\(.foo) \(.bar)"'
    

    生产

    112 234324
    

    您可能还需要考虑将值放入数组并使用 @tsv 例如

    echo '{ "fmep": { "foo": 112, "bar": 234324, "cat": 21343423 } }' | \
    jq -r '.fmep | [.foo, .bar] | @tsv'
    

    产生制表符分隔

    112 234324
    

    【讨论】:

    • 这就像一个魅力!看起来 jq "-j" 选项也有效,但字符串插值更具可读性。
    • 也许只有我一个人,但是做 TSV 转换感觉做的很糟糕。使用字符串插值感觉输出数据的自然方式。
    【解决方案2】:

    这是使用联合输出 (-j) 的语法:

    jq -j '.fmep | .foo, " ", .bar, "\n"' payload.json
    

    【讨论】:

      【解决方案3】:

      假设我们的 JSON (example.json) 如下所示: { “你好世界”, “富”:“酒吧” }

      为了将几个字段连接到同一行,您可以:

      $ jq -j '.hello,.foo' example.json
      

      这将导致

      worldbar
      

      想要添加分隔符?假设一个空格

      $ jq -j '.hello," ",.foo' example.json
      

      这将导致

      world bar
      

      *请确保您使用的是 jq 1.5 或更高版本

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-01
        • 2016-07-13
        • 2022-12-14
        • 2018-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多