[英]How to remove unnecessary items from an JSON with JQ?
我需要從這個:(示例)
{
"jobs": [
{},
{}
],
"services": {
"service-1": {
"version": "master"
},
"service-2": {
"foo": true,
"version": "master"
},
"service-3": {
"bar": "baz"
}
}
}
做這個:
{
"services": {
"service-1": {
"version": "master"
},
"service-2": {
"version": "master"
}
}
}
所以刪除除.services.*.version
之外的所有內容。 請幫助,以我對 JQ 的了解無法處理它。
如果您想區分“版本”不存在或為空:
{services}
| .services |= map_values(select(has("version")) | {version} )
非常籠統地翻譯你的表達式.services.*.version
,你可以使用tostream
如下:
reduce (tostream
| select(length==2 and
(.[0] | (.[0] == "services" and
.[-1] == "version")))) as $pv (null;
setpath($pv[0]; $pv[1]) )
為了減少內存需求,您可以修改上述解決方案以使用 jq 的流解析器,或者使用上面的reduce
,或者使用fromstream
:
jq -n --stream -f program.jq input.json
其中 program.jq 包含:
fromstream(inputs
| select( if length == 2
then .[0] | (.[0] == "services" and
.[-1] == "version")
else . end ) )
.services.*.version.*
更廣泛地解釋.services.*.version
以便不要求路徑的終端組件為.version
,只需將.[-1] == "version"
替換為:
index("version")
在上面。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.