我需要使用jq从以下JSON示例中解析出特定信息。根据“仓库”,我需要能够从属性数组中解析所有“键”和“值”并与存储库相关联。例如,仓库“ libs-production-local”将需要解析字符串中带有“ prod”及其相关日期值的所有属性键。必须是jq并在.sh中运行。
{
"results":[
{
"repo":"libs-production-local",
"path":"com/company/version",
"name":"sql.21.tar",
"type":"file",
"size":"40123",
"created":"date",
"created_by":"someone",
"modified":"date",
"modified_by":"someone",
"updated":"date",
"depth":4,
"actual_md5":"asdflsdf23a4324234",
"orginal_sha1":"sadlkfjsdklfjsadf",
"properties":[
{
"key":"deploy.uat",
"value":"2018-09-23"
},
{
"key":"deploy.prod.TLE",
"value":"2018-10-20"
},
{
"key":"deploy.prodXYZ",
"value":"2018-10-20"
},
{
"key":"deploy.prodPDQ",
"value":"2018-10-20"
},
{
"key":"deploy.prod.ABC",
"value":"2018-10-21"
},
{
"key":"businessUnit.name",
"value":"IndivdualName"
},
{
"key":"deploy.qa.ser2",
"value":"2018-10-20"
},
{
"key":"deploy.qa.ser1",
"value":"2018-11-23"
},
{
"key":"build.timestamp",
"value":"1510850899004"
}
],
"virtual_repos":[
"libs-production "
]
},
{
"repo":"libs-production-local",
"path":"com/company/version",
"name":"sql.22.tar",
"type":"file",
"size":"40123",
"created":"date",
"created_by":"someone",
"modified":"date",
"modified_by":"someone",
"updated":"date",
"depth":4,
"actual_md5":"asdflsdf23a4324234",
"orginal_sha1":"sadlkfjsdklfjsadf",
"properties":[
{
"key":"deploy.prodPDQ",
"value":"2018-10-22"
},
{
"key":"deploy.prodABC",
"value":"2018-10-20"
},
{
"key":"businessUnit.name",
"value":"IndivdualName"
},
{
"key":"deploy.qa",
"value":"2018-10-20"
},
{
"key":"deploy.dev",
"value":"2018-11-19"
}
],
"virtual_repos":[
"libs-production "
]
}
],
"range":{
"start_pos":0,
"end_pos":479,
"total":479
}
}
我已经尝试了多种方法来做到这一点(包括该方法),但没有任何效果。
jq -r '.results[] | ( .properties |map(select(.key[] contains ("prod")) '
答案 0 :(得分:0)
我这样解决了:
DISTINCT
这将从每个结果的属性数组中获取所有键值对。然后,选择键中包含“ prod”的键,并返回这些键和值的数组。给定您从上面输入的示例,这是返回值:
jq -r '[ .results[].properties[] | select(.key | contains("prod")) ]'
与您要寻找的东西接近吗?
答案 1 :(得分:0)
还有,这是一种替代解决方案,基于JSON的步行路径Unix工具: jtc
:
bash $ <file.json jtc -w'[key]:<prod>R:[-1]' -j
[
{
"key": "deploy.prod.TLE",
"value": "2018-10-20"
},
{
"key": "deploy.prodXYZ",
"value": "2018-10-20"
},
{
"key": "deploy.prodPDQ",
"value": "2018-10-20"
},
{
"key": "deploy.prod.ABC",
"value": "2018-10-21"
},
{
"key": "deploy.prodPDQ",
"value": "2018-10-22"
},
{
"key": "deploy.prodABC",
"value": "2018-10-20"
}
]
bash $
PS>披露:我是jtc
工具的创建者