【发布时间】:2020-05-06 10:54:53
【问题描述】:
我希望我已经清楚地表达了我的问题。 需要帮助查询,他们使用 JQ 解析多个 json 文件,其中每个文件中的结构是非线性的。该应用程序生成类似于此示例的配置数据。每个文件可以有零个或多个 DualEndPoint 或 Local 对象。我需要能够在“用户”属性中查询特定用户并插入新密码以重新提交回 api。对于 DualEndPoints,嵌套对象名称是可变的,因此无法在查找“用户”属性时对这些值进行编码。
如果找到特定用户的匹配项,则返回仅插入该用户的新密码的整个结构。在示例中,查询 user1 将返回整个 PROFILE1 和 PROFILE2,但不返回 PROFILE3,因为它不包含 user1 凭据。
{
"PROFILE1": {
"Type": "ConnectionProfile:FileTransfer:DualEndPoint",
"WorkloadAutomationUsers": [
"*"
],
"VerifyBytes": true,
"TargetAgent": "sqlrptvmjhbpr01",
"TargetCTM": "Production",
"Endpoint:Src:Local_0": {
"Type": "Endpoint:Src:Local",
"User": "user1",
"Port": "0",
"OsType": "Windows",
"HostName": "Local",
"Password": "*****",
"HomeDirectory": "/user1homedir"
},
"Endpoint:Dest:SFTP_1": {
"Type": "Endpoint:Dest:SFTP",
"User": "user2",
"HostName": "server2",
"Password": "*****",
"HomeDirectory": "/user2homedir"
}
},
"PROFILE2": {
"Type": "ConnectionProfile:FileTransfer:Local",
"WorkloadAutomationUsers": [
"*"
],
"VerifyBytes": true,
"User": "user1",
"VerifyDestination": true,
"OsType": "Windows",
"HostName": "Local",
"Password": "*****",
"TargetAgent": "server1",
"TargetCTM": "Production"
},
"PROFILE3": {
"Type": "ConnectionProfile:FileTransfer:Local",
"WorkloadAutomationUsers": [
"*"
],
"VerifyBytes": true,
"User": "user3",
"OsType": "Windows",
"HostName": "Local",
"Password": "*****",
"HomeDirectory": "/user3hoemdir",
"TargetAgent": "server2",
"TargetCTM": "Production"
}
}
【问题讨论】:
-
抱歉 - 修复了上面原始帖子中的格式。
-
用户的新密码如何输入?
-
普通 jq --arg 将在最终调用中添加到命令行: jq --arg PWD "actualpw" '.....' 应该替换指定用户的密码属性。让我发疯的部分是如何在未知对象名称下处理结构中不同位置的用户属性
-
是的,
user属性不能保证始终在Endpoint:Dest:对象内? -
它会一直存在,但会根据
.Type的值出现在不同的位置。其中Type="ConnectionProfile:FileTransfer:Local"(如在PROFILE3 中)User保证在顶层作为普通对象存在。在Type="ConnectionProfile:FileTransfer:DualEndPoint"的位置,还有两个描述源和目标的对象,每个对象在第二级都有自己的User对象。
标签: json jq non-linear