如何从嵌套(数组?)响应中获取JQ名称/值对?



我正在遍历 JSON 响应文件并成功存储每次迭代的名称/值对。由于我缺乏经验,我失败了,无法正确调整过滤器以访问嵌套数组,这是响应的一部分。我需要一些指导来设置正确的 JQ 过滤器

目的是循环访问 WEB-API curl 命令的响应。在我的情况下,在SonarQube中创建的问题,并且基于特定评论的存在,是否创建JIRA票证(不是示例的一部分(。

#!/usr/bin/env bash
SQIssues=$(curl --user user:pass https://sonarqube.domain.nl/api/issues/search?additionalFields=comments&statuses=OPEN&types=BUG&branch=master&componentKeys=project)
for k in $(jq '.issues | keys | .[]' <<< "$SQIssues"); do
key=$(jq -r ".issues[$k].key" <<< "$SQIssues");
status=$(jq -r ".issues[$k].status" <<< "$SQIssues");
// TWO LINES BELOW NOT-OK
comuser=$(jq -r ".issues[$k] | .comments[].login" <<< "$SQIssues");
com=$(jq -r ".issues[$k] .comments[].markdown" <<< "$SQIssues");
echo key="$key" and status="$status" and comment="$com" by user="$comuser";
read -n 1 -s -r -p "Press any key to continue";
done

响应(正确抓取密钥和状态(:

Press any key to continuekey=AWySAdI5-U8iL73rOJWx; and status=OPEN and comment= by user=
Press any key to continuekey=AWyMy9EK-U8iL73rOI-c; and status=OPEN and comment= by user=
Press any key to continuekey=AWyMy9Er-U8iL73rOI-d; and status=OPEN and comment= by user=

我成功地将N/V对置于特定水平。我无法从与"键"或"状态"相同的级别的"注释"数组中获取 N/V 对

确定 =

ISSUES
-- KEY=xx
-- STATUS=xx

NOK = (注释下的 n/v,更深一层(

ISSUES
-- Comments
--- KEY=xx
--- MARKDOWN=xx

我假设"评论"是一个数组。我尝试在循环期间存储例如降价值。

我尝试使用的示例 SQ 响应正文(示例输入(">$SQIssues" 这是完整回复的截图,发布在 pastebin 上:https://pastebin.com/MNubhfWM

{
key: "AWtQSFvOvmpNDcmJ7zeY",
rule: "javascript:S930",
severity: "CRITICAL",
component: "path/to/file.js",
project: "project-name",
line: 350,
hash: "9a8c7b5d9121757995511514602d1fd3",
textRange: {},
flows: [],
status: "OPEN",
message: "This function expects no arguments, but 1 was provided.",
effort: "10min",
debt: "10min",
author: "user@domain.nl",
tags: [],
comments: [
{
key: "AWxxXwIoRqbStspvKH2w",
login: "lmolenaar",
htmlText: "<a href="https://jira.domain.nl/browse/xxx-30093" target="_blank">https://jira.domain.nl/browse/xxx-30093</a>",
markdown: "https://jira.domain.nl/browse/xxx-30093",
updatable: true,
createdAt: "2019-08-08T15:15:47+0200"
}
],
creationDate: "2019-06-04T11:33:28+0200",
updateDate: "2019-08-08T15:15:47+0200",
type: "BUG",
organization: "default-organization",
fromHotspot: false
},

对于上面的输入,我尝试存储注释:登录和注释:markdown

  1. 使用您的 pastebin JSON 作为输入,并注释掉以//开头的行和以read开头的行,您的脚本实际上运行到完成。

  2. 由于comments是一个数组,因此像您所做的那样编写.comments[]有点风险,因为 .comments 可能没有一个元素。 如果符合您的要求,编写.comments[0]的风险会更小。

  3. 您的脚本调用 jq 五次,但修改它并不需要太多精力,以便只调用一次 jq。有关如何执行此操作的一些想法,请参阅例如从 JSON 对象中提取 2 个值并使用 jq 和 bash 在循环中用作变量

相关内容

  • 没有找到相关文章