我有一个由JSON对象组成的复杂数组,这些对象的属性是数组,可以填充也可以不填充。
我正在寻找一种使用jq过滤掉在其updates属性中没有任何项的数组元素的方法,但是这是隐藏在对象树的深处的。
有办法从输入JSON数组中生成示例输出吗?
我想找的是:
从具有baseBranch属性和非空config属性的数组中选择所有顶级对象,并筛选出结果,只显示(gradle和gradle-wrapper)属性中具有非空deps数组属性的元素。结果是一个deps元素,其中包含一个非空的updates数组。
感谢所有能够接受这一挑战的人!
编辑:
.[] | . as $parent | select(.baseBranch != null and .config != null) | .config | [.gradle[] .deps[]]deps数组,并根据它们所在的属性对它们进行分组。编辑2:
下面的查询正在返回我想要的大部分信息。但我想知道如何将updates按repository和file值分组。
jq '.[]
| . as $parent
| select(.baseBranch != null and .config != null)
| .config.gradle[]?.deps[]? as $deps
| [
{
repository: $parent.repository,
file:$deps.managerData.packageFile,
depName:$deps.depName,
currentVersion:$deps.currentValue,
newVersion:$deps.updates[]?.newVersion
}
]
'/* Desired sample output */
[
{
"repository": "repositoryName",
"numberOfUpdates": 5,
"gradleUpdates": [
{
"fileName": "dependencies.gradle",
"package": "packageName.api:feature-flags", /* if packageName then display the depName */
"currentVersion": "0.20.0",
"newVersion": "0.21.0"
},
{
"fileName": "dependencies.gradle",
"package": "io.rest-assured:xml-path", /* if packageName then display the depName */
"currentVersion": "4.5.1",
"newVersion": "5.1.1"
},
{
"fileName": "build.gradle",
"package": "com.diffplug.spotless:com.diffplug.spotless.gradle.plugin", /* if packageName then display the depName */
"currentVersion": "6.9.0",
"newVersion": "6.10.0"
},
{
"fileName": "build.gradle",
"package": "org.springframework.boot:org.springframework.boot.gradle.plugin", /* if packageName then display the depName */
"currentVersion": "2.7.2",
"newVersion": "2.7.3"
}
],
"gradleWrapperUpdates": [
{
"fileName": "gradle/wrapper/gradle-wrapper.properties",
"currentVersion": "7.5",
"newVersion": "7.5.1"
}
]
}
]
/* This is the input */
[
{
"randomKey": "this is not what I am looking for",
"otherFields": "other object that does not match the query"
},
{
"repository": "myRepositoryName",
"baseBranch": "master",
"config": {
"gradle": [
{
"packageFile": "gradle.properties",
"datasource": "maven",
"deps": []
},
{
"packageFile": "dependencies.gradle",
"datasource": "maven",
"deps": [
{
"depName": "packageName:dependencyName",
"currentValue": "0.8.0",
"managerData": {
"fileReplacePosition": 611,
"packageFile": "dependencies.gradle"
},
"fileReplacePosition": 611,
"registryUrls": [
"https://mavenCentral/repository/release",
"https://mavenCentral/repository/maven-mirror",
"https://mavenCentral/repository/gradle-plugins"
],
"depType": "dependencies",
"depIndex": 0,
"updates": [],
"warnings": [],
"versioning": "gradle",
"currentVersion": "0.8.0",
"fixedVersion": "0.8.0"
},
{
"depName": "packageName.api:feature-flags",
"currentValue": "0.20.0",
"managerData": {
"fileReplacePosition": 1118,
"packageFile": "dependencies.gradle"
},
"fileReplacePosition": 1118,
"registryUrls": [
"https://mavenCentral/repository/release",
"https://mavenCentral/repository/maven-mirror",
"https://mavenCentral/repository/gradle-plugins"
],
"depType": "dependencies",
"depIndex": 8,
"updates": [
{
"bucket": "non-major",
"newVersion": "0.21.0",
"newValue": "0.21.0",
"releaseTimestamp": "2022-08-25T04:57:50.000Z",
"newMajor": 0,
"newMinor": 21,
"updateType": "minor",
"branchName": "renovate/all-minor-patch"
}
],
"warnings": [],
"versioning": "gradle",
"currentVersion": "0.20.0",
"isSingleVersion": true,
"fixedVersion": "0.20.0"
},
{
"depName": "io.rest-assured:xml-path",
"currentValue": "4.5.1",
"managerData": {
"fileReplacePosition": 3307,
"packageFile": "dependencies.gradle"
},
"fileReplacePosition": 3307,
"registryUrls": [
"https://mavenCentral/repository/release",
"https://mavenCentral/repository/maven-mirror",
"https://mavenCentral/repository/gradle-plugins"
],
"depType": "dependencies",
"depIndex": 39,
"updates": [
{
"bucket": "major",
"newVersion": "5.1.1",
"newValue": "5.1.1",
"releaseTimestamp": "2022-06-10T06:46:14.000Z",
"newMajor": 5,
"newMinor": 1,
"updateType": "major",
"branchName": "renovate/io.rest-assured-xml-path-5.x"
}
],
"warnings": [],
"versioning": "gradle",
"sourceUrl": "http://svn.sonatype.org/spice/tags/oss-parent-5",
"homepage": "https://rest-assured.io/",
"currentVersion": "4.5.1",
"isSingleVersion": true,
"fixedVersion": "4.5.1"
},
{
"depName": "io.rest-assured:json-schema-validator",
"currentValue": "5.1.1",
"managerData": {
"fileReplacePosition": 3376,
"packageFile": "dependencies.gradle"
},
"fileReplacePosition": 3376,
"registryUrls": [
"https://mavenCentral/repository/release",
"https://mavenCentral/repository/maven-mirror",
"https://mavenCentral/repository/gradle-plugins"
],
"depType": "dependencies",
"depIndex": 40,
"updates": [],
"warnings": [],
"versioning": "gradle",
"sourceUrl": "http://svn.sonatype.org/spice/tags/oss-parent-5",
"homepage": "http://maven.apache.org",
"currentVersion": "5.1.1",
"fixedVersion": "5.1.1"
}
]
},
{
"packageFile": "settings.gradle",
"datasource": "maven",
"deps": []
},
{
"packageFile": "build.gradle",
"datasource": "maven",
"deps": [
{
"depType": "plugin",
"depName": "com.diffplug.spotless",
"packageName": "com.diffplug.spotless:com.diffplug.spotless.gradle.plugin",
"registryUrls": [
"https://mavenCentral/repository/release",
"https://mavenCentral/repository/maven-mirror",
"https://mavenCentral/repository/gradle-plugins",
"https://plugins.gradle.org/m2/"
],
"commitMessageTopic": "plugin com.diffplug.spotless",
"currentValue": "6.9.0",
"managerData": {
"fileReplacePosition": 50,
"packageFile": "build.gradle"
},
"fileReplacePosition": 50,
"depIndex": 0,
"updates": [
{
"bucket": "non-major",
"newVersion": "6.10.0",
"newValue": "6.10.0",
"releaseTimestamp": "2022-08-24T14:40:44.000Z",
"newMajor": 6,
"newMinor": 10,
"updateType": "minor",
"branchName": "renovate/all-minor-patch"
}
],
"warnings": [],
"versioning": "gradle",
"currentVersion": "6.9.0",
"isSingleVersion": true,
"fixedVersion": "6.9.0"
},
{
"depType": "plugin",
"depName": "docker-publish-convention",
"packageName": "docker-publish-convention:docker-publish-convention.gradle.plugin",
"registryUrls": [
"https://mavenCentral/repository/release",
"https://mavenCentral/repository/maven-mirror",
"https://mavenCentral/repository/gradle-plugins",
"https://plugins.gradle.org/m2/"
],
"commitMessageTopic": "plugin docker-publish-convention",
"currentValue": "latest.release",
"managerData": {
"fileReplacePosition": 158,
"packageFile": "build.gradle"
},
"fileReplacePosition": 158,
"depIndex": 2,
"updates": [],
"warnings": [],
"versioning": "gradle",
"skipReason": "invalid-value"
},
{
"depType": "plugin",
"depName": "org.springframework.boot",
"packageName": "org.springframework.boot:org.springframework.boot.gradle.plugin",
"registryUrls": [
"https://mavenCentral/repository/release",
"https://mavenCentral/repository/maven-mirror",
"https://mavenCentral/repository/gradle-plugins",
"https://plugins.gradle.org/m2/"
],
"commitMessageTopic": "plugin org.springframework.boot",
"currentValue": "2.7.2",
"managerData": {
"fileReplacePosition": 217,
"packageFile": "build.gradle"
},
"fileReplacePosition": 217,
"depIndex": 3,
"updates": [
{
"bucket": "non-major",
"newVersion": "2.7.3",
"newValue": "2.7.3",
"releaseTimestamp": "2022-08-18T06:30:12.000Z",
"newMajor": 2,
"newMinor": 7,
"updateType": "patch",
"branchName": "renovate/all-minor-patch"
}
],
"warnings": [],
"versioning": "gradle",
"sourceUrl": "https://github.com/spring-projects/spring-boot",
"homepage": "https://spring.io/projects/spring-boot",
"currentVersion": "2.7.2",
"isSingleVersion": true,
"fixedVersion": "2.7.2"
}
]
}
],
"gradle-wrapper": [
{
"packageFile": "gradle/wrapper/gradle-wrapper.properties",
"deps": [
{
"depName": "gradle",
"currentValue": "7.5",
"replaceString": "https\\://mavenCentral/repository/gradle-dist/gradle-7.5-bin.zip",
"datasource": "gradle-version",
"versioning": "gradle",
"depIndex": 0,
"updates": [
{
"bucket": "non-major",
"newVersion": "7.5.1",
"newValue": "7.5.1",
"releaseTimestamp": "2022-08-05T21:17:56.000Z",
"newMajor": 7,
"newMinor": 5,
"updateType": "patch",
"branchName": "renovate/all-minor-patch"
}
],
"warnings": [],
"sourceUrl": "https://github.com/gradle/gradle",
"homepage": "https://gradle.org",
"currentVersion": "7.5",
"isSingleVersion": true,
"fixedVersion": "7.5"
}
]
}
]
}
}
]发布于 2022-08-30 13:54:00
如果对边缘情况做了一些假设,这应该符合您的要求:
map(select(has("baseBranch") and .config != {}) | {
repository,
numberOfUpdates: 0,
gradleUpdates: .config.gradle,
gradleWrapperUpdates: .config."gradle-wrapper"
} | (.gradleUpdates, .gradleWrapperUpdates) |= map(
.packageFile as $fileName | .deps[] | .updates[] as $update | {
$fileName,
package: (.packageName // .depName),
currentVersion,
newVersion: $update.newValue
})
| .numberOfUpdates += ([.gradleUpdates, .gradleWrapperUpdates | length] | add)
)[
{
"repository": "myRepositoryName",
"numberOfUpdates": 5,
"gradleUpdates": [
{
"fileName": "dependencies.gradle",
"package": "packageName.api:feature-flags",
"currentVersion": "0.20.0",
"newVersion": "0.21.0"
},
{
"fileName": "dependencies.gradle",
"package": "io.rest-assured:xml-path",
"currentVersion": "4.5.1",
"newVersion": "5.1.1"
},
{
"fileName": "build.gradle",
"package": "com.diffplug.spotless:com.diffplug.spotless.gradle.plugin",
"currentVersion": "6.9.0",
"newVersion": "6.10.0"
},
{
"fileName": "build.gradle",
"package": "org.springframework.boot:org.springframework.boot.gradle.plugin",
"currentVersion": "2.7.2",
"newVersion": "2.7.3"
}
],
"gradleWrapperUpdates": [
{
"fileName": "gradle/wrapper/gradle-wrapper.properties",
"package": "gradle",
"currentVersion": "7.5",
"newVersion": "7.5.1"
}
]
}
]https://stackoverflow.com/questions/73541010
复制相似问题