作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下文件
[
{
"id": 1,
"name": "Arthur",
"age": "21"
},
{
"id": 2,
"name": "Richard",
"age": "32"
}
]
要同时显示登录名和 ID,我使用以下命令
$ jq '.[] | .name' test
"Arthur"
"Richard"
但是当我把它放在一个 shell 脚本中并尝试将它分配给一个变量时,整个输出将显示在一行中,如下所示
#!/bin/bash
names=$(jq '.[] | .name' test)
echo $names
$ ./script.sh
"Arthur" "Richard"
我想在每次迭代时中断,就像它在命令行上的工作方式一样。
最佳答案
您提供的信息中有几个问题。 jq
过滤器 .[] | .login, .id
不会产生您在 jq-1.5
上声明的输出。对于您的原始 JSON
{
"login":"dmaxfield",
"id":7449977
}
{
"login":"stackfield",
"id":2342323
}
它将产生四行输出,
jq -r '.login, .id' < json
dmaxfield
7449977
stackfield
2342323
如果您有兴趣将它们并排存储,则需要进行变量插值
jq -r '"\(.login), \(.id)"' < json
dmaxfield, 7449977
stackfield, 2342323
如果您觉得存储在变量中的输出不起作用。这可能是因为当您尝试在 shell 中打印变量时缺少双引号。
jqOutput=$(jq -r '"\(.login), \(.id)"' < json)
printf "%s\n" "$jqOutput"
dmaxfield, 7449977
stackfield, 2342323
这样,命令输出中嵌入的新行不会被 shell 吞没。
对于您更新的JSON
(与旧的相比完全是新的),您需要做的就是
jqOutput=$(jq -r '.[] | .name' < json)
printf "%s\n" "$jqOutput"
Arthur
Richard
关于json - 如何在 jq 中的每次迭代中获取换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44062915/
我是一名优秀的程序员,十分优秀!