You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用jq筛选嵌套数组中field.usesEncryption为true的连接?

用jq筛选包含field.usesEncryption=true的connection

需求:从给定的JSON数据中,使用jq工具筛选出所有包含至少一个field.usesEncryption属性为true的connection对象。

示例JSON数据

{
  "connections": {
    "connection": [
      {
        "field": [
          {
            "id": "url",
            "encryptedValueSet": false,
            "usesEncryption": false,
            "componentOverride": false,
            "useDefault": false
          },
          {
            "id": "user",
            "encryptedValueSet": false,
            "usesEncryption": false,
            "componentOverride": false,
            "useDefault": false
          },
          {
            "id": "password",
            "encryptedValueSet": true,
            "usesEncryption": true,
            "componentOverride": false,
            "useDefault": false
          }
        ],
        "id": "3ea89002-51f5-4369-9539-63c3bd406a64"
      }
    ]
  }
}

未达预期的尝试命令

jq '. | select(.connections.connection[].field[] | .usesEncryption==true)' EnvironmentExtensions.json
jq '. | .connections.connection[].field[] | select(.usesEncryption==true)' EnvironmentExtensions.json

正确的jq命令

方法一:直接遍历筛选

jq '.connections.connection[] | select(.field[] | .usesEncryption == true)' EnvironmentExtensions.json

遍历每个connection对象,检查其field数组中是否存在usesEncryption=true的元素,只要存在就保留整个connection。

方法二:用any函数明确逻辑(推荐)

jq '.connections.connection[] | select(any(.field[]; .usesEncryption == true))' EnvironmentExtensions.json

any函数专门用于判断数组中是否存在至少一个元素满足指定条件,逻辑更清晰,可读性更强,避免歧义。

之前命令无效的原因

  • 第一条命令是对整个根JSON对象做筛选,只要有任意一个connection的field满足条件,就会返回整个根对象,而非目标connection。
  • 第二条命令仅输出了符合条件的field对象,而非包含该field的完整connection。

内容的提问来源于stack exchange,提问作者Anil Samuel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 08:55:18