如何使用shell脚本获取json文件的值?

t98cgbkg  于 2022-12-13  发布在  Shell
关注(0)|答案(1)|浏览(197)

我有一个示例json文件,如下所示:

{
  "component": {
    "id": "xxxxxxxx",
    "key": "abc",
    "name": "project",
    "qualifier": "TRK",
    "measures": [
      {
        "metric": "ncloc",
        "value": "43"
      },
      {
        "metric": "bugs",
        "value": "0",
        "bestValue": true
      },
      {
        "metric": "blocker_violations",
        "value": "0",
        "bestValue": true
      },
      {
        "metric": "info_violations",
        "value": "0",
        "bestValue": true
      },
      {
        "metric": "critical_violations",
        "value": "0",
        "bestValue": true
      },
      {
        "metric": "vulnerabilities",
        "value": "0",
        "bestValue": true
      },
      {
        "metric": "major_violations",
        "value": "0",
        "bestValue": true
      },
      {
        "metric": "code_smells",
        "value": "0",
        "bestValue": true
      },
      {
        "metric": "minor_violations",
        "value": "0",
        "bestValue": true
      },
      {
        "metric": "reliability_rating",
        "value": "1.0",
        "bestValue": true
      },
      {
        "metric": "security_rating",
        "value": "1.0",
        "bestValue": true
      }
    ]
  }
}

从上面的.json文件中,我需要获取指标及其相应的值,如下所示:说“bugs:0”。我确实找到了相关的博客,但有点困惑。
我的用例:我想读取所有的指标值,如果任何一个值〈〉0,则执行exit 1,否则执行exit 0。

if [  jq -r '.component.measures[].info_violations.value'!= 0 ]
then 
exit 1
else
exit 0

代码没有抛出任何错误,但我确信这是不正确的逻辑,只是尝试了一个指标。现在我清楚了我的用例,我希望有人能帮助我。
我需要提取度量[]中项的所有度量和相应值

zkure5ic

zkure5ic1#

您可以使用以下JQ过滤器来检查值的any是否等于0

.component.measures | any(.value == "0")

感谢@Glenn指出了--exit-status,这让JQ以您需要的状态退出。所以我们可以将其作为exit值,使用$?

#!/bin/bash

jq --exit-status '.component.measures | any(.value == "0")' input
exit $?
JqPlay(第一次)

相关问题