首页 > 解决方案 > 从嵌套的 json 中获取价值 - Bash

问题描述

我环顾四周,但找不到任何有帮助的东西,这是我的问题,我有一个 bash 脚本,它可以进行 curl 查询并获取 json,如下所示:

{
  "user1": {
    "email": "email1@email.cccc",
    "shell": "/usr/local/bin/bash",
    "status": "ACTIVE",
    "userId": "user1",
    "homeDir": "/home/user1",
    "unixUid": 123456,
    "accesses": [
      "computer1"
    ],
    "personId": 1234,
    "isPrimary": true,
    "projectGroupIds": [
      "bigproj"
    ],
    "primaryProjectGroupId": "bigproj"
  },
  "user2": {
    "email": "email2@email.cccc",
    "shell": "/usr/local/bin/bash",
    "status": "ACTIVE",
    "userId": "user2",
    "homeDir": "/home/user2",
    "unixUid": 9876564,
    "accesses": [
      "computer1"
    ],
    "personId": 5678,
    "isPrimary": true,
    "projectGroupIds": [
      "smallporj"
    ],
    "primaryProjectGroupId": "smallproj"
...

我需要做的是创建一个列表,其中包含:

UserId: user1  email: email1@email.cccc
UserId: user2  email: email2@email.cccc
UserId: user3  email: email3@email.cccc
...

我的问题是用户名密钥基本上总是在变化并且它没有固定密钥名称。最重要的键类型是:

jq -c 'to_entries[] | [.key, (.value|type)]'
["meta","object"]
["body","object"]

那么创建一个需要与另一个列表进行比较的列表的最佳方法应该是什么?提前致谢。

标签: jsonkeyjq

解决方案


这对你有用吗?

jq -c 'to_entries[] | "UserId: " + .key + "  email: " + .value.email '

推荐阅读