json jq:提取其他值与模式匹配值

gstyhher  于 2023-07-01  发布在  其他
关注(0)|答案(1)|浏览(153)

下面是JSON:

{
  "id": "jboss_data1",
  "DS1": {
    "policy_name": "CAT_LOCATION",
    "username": "PRODUCTION_1",
    "password_clear": "7bla1234",
  },
  "DS3": {
    "policy_name": "CAT_SRC",
    "username": "PRODUCTION_2",
    "password_clear": "foo7864",
  },
  "DS4": {
    "policy_name": "CAT_FOLDER",
    "username": "PRODUCTION_3",
    "password_clear": "123bar456",
  }
}

在bash中,当username匹配我的变量时,我试图提取password_clear值。
我试过类似于

jq -r --arg user "${user_picked}" '.[]|select(.value.username=="$user").password_clear' file.json

(我也尝试了很多不同的其他组合,但没有成功…)
您能告诉我这个请求的正确语法吗?
问候

vdgimpew

vdgimpew1#

因为不是所有的对象都有username字段,所以你需要使用Optional Object Identifier-Index(?)作为.username?来捕获那些丢失的对象:

jq -r --arg user "PRODUCTION_1" \
  '.[] | select(.username? == $user).password_clear' file.json

输出:

7bla1234

关于您的尝试,您使用了.value,但这并不需要,因为.[]可以很好地循环对象。
.value可以来自to_entries,将对象转换为键/值对,但同样,使用.[]要容易得多。

相关问题