【发布时间】:2019-06-22 14:11:44
【问题描述】:
我在做什么? 我有一个 JSON 文件作为 sonar-report.json。我想在 shell 脚本中迭代 sonar-report.json 以读取 json 的值。 要解析 JSON 文件,我使用的是 jq https://stedolan.github.io/jq/
所以下面的代码我试图在 shell 脚本中执行
alias jq=./jq-win64.exe
for key in $(jq '.issues | keys | .[]' sonar-report.json); do
echo "$key"
line=$(jq -r ".issues[$key].line" sonar-report.json)
done
问题 当我执行此操作时,控制台给我错误:
jq: error: syntax error, unexpected INVALID_CHARACTER (Windows cmd shell quoting issues?) at <top-level>, line 1:
如果我更新上面的脚本,并添加数组的静态索引,那么脚本就可以正常工作
alias jq=./jq-win64.exe
for key in $(jq '.issues | keys | .[]' sonar-report.json); do
echo "$key"
line0=$(jq -r ".issues[0].line" sonar-report.json)
line1=$(jq -r ".issues[1].line" sonar-report.json)
done
所以最后我想要什么: 我想迭代值并在控制台中打印,如
alias jq=./jq-win64.exe
for key in $(jq '.issues | keys | .[]' sonar-report.json); do
line=$(jq -r ".issues[$key].line" sonar-report.json)
echo $line
done
所以输出应该是
15
这是我作为 sonar-report.json 的 JSON 文件
{
"issues": [
{
"key": "016B7970D27939AEBD",
"component": "bits-and-bytes:src/main/java/com/catalystone/statusreview/handler/StatusReviewDecisionLedHandler.java",
"line": 15,
"startLine": 15,
"startOffset": 12,
"endLine": 15,
"endOffset": 14,
"message": "Use the \"equals\" method if value comparison was intended.",
"severity": "MAJOR",
"rule": "squid:S4973",
"status": "OPEN",
"isNew": true,
"creationDate": "2019-06-21T15:19:18+0530"
},
{
"key": "AWtqCc-jtovxS8PJjBiP",
"component": "bits-and-bytes:src/test/java/com/catalystone/statusreview/service/StatusReviewInitiationSerivceTest.java",
"message": "Fix failing unit tests on file \"src/test/java/com/catalystone/statusreview/service/StatusReviewInitiationSerivceTest.java\".",
"severity": "MAJOR",
"rule": "common-java:FailedUnitTests",
"status": "OPEN",
"isNew": false,
"creationDate": "2019-06-18T15:32:08+0530"
}
]
}
请帮助我,在此先感谢
【问题讨论】:
-
请将该示例输入的所需输出添加到您的问题中。
-
适用于 Linux。输出为
15和Null。您不想只使用jq '.issues[].line'? -
我使用的是windows机器,我应该怎么做才能解决这个问题:(
-
您使用的是哪个版本的 jq?你在什么环境下运行它? (Cygwin?Msys2?)
-
好的,我对 Windows 上的 Git(或 Windows 上的任何东西)知之甚少,我无法测试任何解决方案,但我怀疑您可以只使用所示的
-b选项在我的回答中。
标签: json bash shell parsing jq