在同一行上打印多个值

Mic*_*ter 10 json jq

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

{
  "fmep": {
    "foo": 112,
    "bar": 234324,
    "cat": 21343423
  }
}
Run Code Online (Sandbox Code Playgroud)

并吐出:

112 234324
Run Code Online (Sandbox Code Playgroud)

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

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

112  
234324
Run Code Online (Sandbox Code Playgroud)

如果有一个示例显示如何执行此操作,我会很感激任何指针.

jq1*_*727 18

您的示例中最简单的方法是使用字符串插值-r选项.例如

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

产生

112 234324
Run Code Online (Sandbox Code Playgroud)

您可能还想考虑将值放在数组中并使用@tsv例如

echo '{ "fmep": { "foo": 112, "bar": 234324, "cat": 21343423 } }' | \
jq -r '.fmep | [.foo, .bar] | @tsv'
Run Code Online (Sandbox Code Playgroud)

它产生制表符分隔

112 234324
Run Code Online (Sandbox Code Playgroud)


Roy*_*ack 8

假设我们的 JSON ( example.json ) 如下所示: { "hello":"world", "foo":"bar" }

为了将几个字段加入同一行,您可以:

$ jq -j '.hello,.foo' example.json
Run Code Online (Sandbox Code Playgroud)

这将导致

worldbar
Run Code Online (Sandbox Code Playgroud)

想要添加分隔符吗?比如说一个空格

$ jq -j '.hello," ",.foo' example.json
Run Code Online (Sandbox Code Playgroud)

这将导致

world bar
Run Code Online (Sandbox Code Playgroud)

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


ken*_*orb 6

以下是使用连接输出 ( -j)的语法:

jq -j '.fmep | .foo, " ", .bar, "\n"' payload.json
Run Code Online (Sandbox Code Playgroud)