首页 > 解决方案 > 数组元素上的 sort_by 给出错误 'Cannot index string with string "key"'

问题描述

我正在尝试通过拉取请求 ID 获取代码扫描的状态,但我无法获取状态的值。json 文件如下所示。

{
"pullRequests": [
{
  "key": "11346",
  "title": "feature/XXX-Validation",
  "branch": "feature/XXX-Validation",
  "base": "develop",
  "status": {
    "qualityGateStatus": "OK",
    "bugs": 0,
    "vulnerabilities": 0,
    "codeSmells": 1
  },
  "analysisDate": "2020-07-27T14:22:36+0000",
  "url": "https://abc/org/_git/repo/pullrequest/11346",
  "target": "develop"
},
{
  "key": "11151",
  "title": "feature/xxx-data",
  "branch": "feature/xxx-data",
  "base": "develop",
  "status": {
    "qualityGateStatus": "OK",
    "bugs": 0,
    "vulnerabilities": 0,
    "codeSmells": 0
  },
  "analysisDate": "2020-07-22T11:11:11+0000",
  "url": "https://abc/org/_git/repo/pullrequest/11151",
  "target": "develop"
}
]
}

我需要按键值对这个 json 进行排序(因为这是最简单的方法 - 之前我曾尝试按 analysisDate 排序)并获取该键的 qualityGateStatus 值。

我尝试使用此命令首先按 key 或 analysisDate 排序,然后尝试使用 key,但我不断收到错误消息。我想也许该值不是字符串,所以尝试将键映射到数字,但仍然不起作用。

jq: error (at <stdin>:0): Cannot index string with string

尝试的命令:

jq '.pullRequests[] |sort_by(.analysisDate)[-1].key'
jq '.pullRequests[] | sort_by(.key|tonumber)'

错误:

jq:错误(在:0):无法使用字符串“key”索引字符串

标签: jsonsortingjq

解决方案


内置sort_by接受一个数组作为输入,而不是一个对象流。你需要做:

jq '.pullRequests | sort_by(.key)'

推荐阅读