gpt4 book ai didi

json - 如何在 jq 中的每次迭代中获取换行符

转载 作者:行者123 更新时间:2023-11-29 08:59:48 28 4
gpt4 key购买 nike

我有以下文件

[
{
"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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com