【问题标题】:select value from an array using jq使用 jq 从数组中选择值
【发布时间】:2015-08-25 21:08:53
【问题描述】:

我正在尝试使用 jq 编写一个查询,该查询循环遍历以下 json 并在 Name = "efs-docker" 的值时返回 FileSystemId 的值,如果未找到匹配的记录则退出脚本。我以为我可以使用 foreach 循环来做到这一点,但语法令人困惑。是否可以使用 reduce 或 select 函数来代替?

{
   "FileSystems": [
     {
        "SizeInBytes": {
            "Value": 6144
        },
        "Name": "not-docker",
        "CreationToken": "console-db868fd6-ed6d-46f8-9e3e-4501293847f5",
        "CreationTime": 1440519280.0,
        "FileSystemId": "fs-0fdd32a6",
        "NumberOfMountTargets": 3,
        "LifeCycleState": "available",
        "OwnerId": "310444902345"
    },
    {
        "SizeInBytes": {
            "Timestamp": 1440514799.0,
            "Value": 307060736
        },
        "Name": "efs-docker",
        "CreationToken": "console-3b8b33de-dc45-4634-b6e1-882187ac3cd3",
        "CreationTime": 1440426036.0,
        "FileSystemId": "fs-d2c22d7b",
        "NumberOfMountTargets": 3,
        "LifeCycleState": "available",
        "OwnerId": "310444902345"
         }
    ]
}

谢谢, 杰里米

【问题讨论】:

    标签: json parsing jq


    【解决方案1】:

    避免多次调用jq,从而避免创建多个进程的开销:

    jq -r '.FileSystems[] | select(.Name=="efs-docker") | .FileSystemId'
    

    【讨论】:

      【解决方案2】:

      我设法做到了:

      jq '.FileSystems[]' | jq 'select(.Name=="efs-docker")' | jq -r '.FileSystemId'
      

      它可能效率不高,但确实有效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-11
        • 1970-01-01
        • 2019-07-04
        • 1970-01-01
        相关资源
        最近更新 更多