无法使用jq-in-shell脚本获取JSON数组值
我正在尝试从以下JSON文件获取密钥: 我刚刚执行了下面的命令,它将给出下面的JSON输出 命令:无法使用jq-in-shell脚本获取JSON数组值,json,linux,shell,jq,Json,Linux,Shell,Jq,我正在尝试从以下JSON文件获取密钥: 我刚刚执行了下面的命令,它将给出下面的JSON输出 命令: jq -r '.issues' "issues": [ { "expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields", "id": "1999875", "self": "https://amazon.kindle.com/jira/rest/ap
jq -r '.issues'
"issues": [
{
"expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields",
"id": "1999875",
"self": "https://amazon.kindle.com/jira/rest/api/2/issue/1999875",
"key": "KINDLEAMZ-67578"
},
{
"expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields",
"id": "2019428",
"self": "https://amazon.kindle.com/jira/rest/api/2/issue/2019428",
"key": "KINDLEAMZ-68661"
},
{
"expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields",
"id": "2010958",
"self": "https://amazon.kindle.com/jira/rest/api/2/issue/2010958",
"key": "KINDLEAMZ-68167"
}
]
}
{
"JIRA-1":"KINDLEAMZ-67578",
"JIRA-2":"KINDLEAMZ-68661",
"JIRA-3":"KINDLEAMZ-68167"
}
输出:
jq -r '.issues'
"issues": [
{
"expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields",
"id": "1999875",
"self": "https://amazon.kindle.com/jira/rest/api/2/issue/1999875",
"key": "KINDLEAMZ-67578"
},
{
"expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields",
"id": "2019428",
"self": "https://amazon.kindle.com/jira/rest/api/2/issue/2019428",
"key": "KINDLEAMZ-68661"
},
{
"expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields",
"id": "2010958",
"self": "https://amazon.kindle.com/jira/rest/api/2/issue/2010958",
"key": "KINDLEAMZ-68167"
}
]
}
{
"JIRA-1":"KINDLEAMZ-67578",
"JIRA-2":"KINDLEAMZ-68661",
"JIRA-3":"KINDLEAMZ-68167"
}
我只想得到以下格式的输出,不知道如何得到它
预期输出:
jq -r '.issues'
"issues": [
{
"expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields",
"id": "1999875",
"self": "https://amazon.kindle.com/jira/rest/api/2/issue/1999875",
"key": "KINDLEAMZ-67578"
},
{
"expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields",
"id": "2019428",
"self": "https://amazon.kindle.com/jira/rest/api/2/issue/2019428",
"key": "KINDLEAMZ-68661"
},
{
"expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields",
"id": "2010958",
"self": "https://amazon.kindle.com/jira/rest/api/2/issue/2010958",
"key": "KINDLEAMZ-68167"
}
]
}
{
"JIRA-1":"KINDLEAMZ-67578",
"JIRA-2":"KINDLEAMZ-68661",
"JIRA-3":"KINDLEAMZ-68167"
}
如何从每个数组中获取键值并如上所示显示?JIRA-n将根据结果增加。给定一个数组,您可以使用
将数组映射为索引和值的数组。然后,可以使用reduce
或with_entries/1
映射到对象上所需的键和值
reduce (.issues | to_entries[]) as {$key,$value} ({};
.["JIRA-\($key + 1)"] = $value.key
)
看起来您使用的版本低于1.5。你需要做一些调整,去掉解构
reduce (.issues | to_entries[]) as $e ({};
.["JIRA-\($e.key + 1)"] = $e.value.key
)
非常感谢你。让我试着接受你的回答。Jeff Mercado-我尝试在shell中运行相同的命令,并得到以下错误错误:语法错误,意外的“{”,期望“$”减少(.issues | to_entries[])为{$key,$value}({};[“JIRA-($key+1)”]=$value.key)^1编译错误你能帮我一下吗?我试过了,但我无法确定出哪里出了问题。我使用的是jq 1.5版。你能验证你是否在1.5版上吗?它应该像写的那样在那里工作,它在解构部分失败{$key,$value}是在1.5中添加的。jq--version
的输出是什么?它可以被重写以使用1.4,而不需要解构。将(.issues | to_entries[])减少为$e({};[“JIRA-\($e.key+1)]=$e.value.key)
jq——版本输出:1.5vJeff Mercado——很多工藤都是你的……最后它与你的魔法一起发挥作用了……再次感谢你……出于你的考虑,这里还有一个替代方案(即非jq)您问题中的JSON操作解决方案,基于unixwalk path
实用程序jtc:实际上,我的上述解决方案和提供的解决方案都不能满足您的要求:“JIRA-n将根据结果增加”。因为如果您在中间插入一条不带键
标签的记录,则两者都会产生错误的结果。我的解决方案可能会被修复(如果标签键
在JSON中是唯一的,则会被简化),如下所示: