【问题标题】:How to get value pairs of the objects from JSON using jq如何使用 jq 从 JSON 中获取对象的值对
【发布时间】:2022-10-24 22:28:40
【问题描述】:

我有一个名为 param.json 的 json 文件,如下所示:

[
    {
     "Value": "anshuman.ceg+Dev@gmail.com",
      "Key": "AccountEmail"
    },
    {
      "Value": "DevABC",
      "Key": "AccountName"
    },
    {
      "Value": "Security (ou-nzx5-8ajd1561)",
      "Key": "ManagedOrganizationalUnit"
    },
    {
      "Value": "anshuman.ceg+Dev@gmail.com",
      "Key": "SSOUserEmail"
    },
    {
      "Value": "John",
      "Key": "SSOUserFirstName"
    },
    {
      "Value": "Smith",
      "Key": "SSOUserLastName"
    }
  ]

我只想获得价值开发ABC这样我就可以在阅读 -r 行时使用。我只需要 DevABC

我正在使用 jq 如下似乎不起作用

jq -r .[1].Value param.json

【问题讨论】:

  • 您需要在过滤器周围加上引号:jq -r '.[1].Value' param.json。您可能也有兴趣使用jq -r 'from_entries.AccountName' param.json。
  • @Anshuman_Mishra - 请明确说明“DevABC”与其他值的区别。是 .Key 的值吗?还是它在数组中的位置?

标签: jq


【解决方案1】:

假设您所有的 Key 值都是不同的,您可以先将数组转换为对象,然后直接访问“AccountName”属性:

jq -r 'from_entries | .AccountName' param.json

from_entries 将生成以下对象,它允许您轻松访问给定键的值:

{
  "AccountEmail": "anshuman.ceg+Dev@gmail.com",
  "AccountName": "DevABC",
  "ManagedOrganizationalUnit": "Security (ou-nzx5-8ajd1561)",
  "SSOUserEmail": "anshuman.ceg+Dev@gmail.com",
  "SSOUserFirstName": "John",
  "SSOUserLastName": "Smith"
}

【讨论】:

    【解决方案2】:

    如果输入中的对象键碰巧不是“Key”和“Value”,select 将是一个好方法:

    jq --arg k 'AccountName' -r '.[] | select(.Key == $k).Value'
    

    【讨论】:

      猜你喜欢
      • 2023-02-23
      • 1970-01-01
      • 1970-01-01
      • 2019-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多