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

合并jq命令提取JSON字段无输出,求修正方案

合并jq命令提取JSON字段的修正方案

问题描述

需要将两个独立运行正常的jq命令合并为一个,提取指定JSON字段,但合并后的命令无法输出结果。

原命令1(提取基础属性)

jq -r '.objects[] | "\(.name),\(.uid),\(.type),\(.\"ipv4-address\"),\(.\"nat-settings\".\"ipv4-address\"),\(.\"nat-settings\".\"ipv6-address\"),\(.\"nat-settings\".\"install-on\"),\(.\"nat-settings\".method)"'

原命令2(提取所属组名)

jq -r '.objects[].groups[].name'

失败的合并命令

jq -r '.objects[] | "\(.name),\(.uid),\(.type),\(.[\"ipv4-address\"]),\(.[\"nat-settings\"][\"ipv4-address\"]),\(.[\"nat-settings\"][\"ipv6-address\"]),\(.[\"nat-settings\"][\"install-on\"]),\(.[\"nat-settings\"].method),\(.groups[]?.name)"'

输入JSON

{
  "from" : 1,
  "to" : 1,
  "total" : 1,
  "objects" : [ {
    "uid" : "11c758bf-15d7-47ba-af1a-200ffa171587",
    "name" : "BL_2.2.2.2",
    "type" : "host",
    "domain" : {
      "uid" : "41e821a0-3720-11e3-aa6e-0800200c9fde",
      "name" : "SMC User",
      "domain-type" : "domain"
    },
    "ipv4-address" : "2.2.2.2",
    "interfaces" : [ ],
    "nat-settings" : {
      "auto-rule" : true,
      "ipv4-address" : "66.66.66.66",
      "ipv6-address" : "",
      "hide-behind" : "ip-address",
      "install-on" : "All",
      "method" : "hide"
    },
    "groups" : [ {
      "uid" : "eebedbc9-ef19-4c68-91d2-cd6ea3fec11d",
      "name" : "network11111",
      "type" : "group",
      "domain" : {
        "uid" : "41e821a0-3720-11e3-aa6e-0800200c9fde",
        "name" : "SMC User",
        "domain-type" : "domain"
      },
      "members" : [ "11c758bf-15d7-47ba-af1a-200ffa171587" ],
      "groups" : [ ],
      "comments" : "",
      "color" : "black",
      "icon" : "General/group",
      "tags" : [ ],
      "meta-info" : {
        "lock" : "unlocked",
        "validation-state" : "ok",
        "last-modify-time" : {
          "posix" : 1683719146105,
          "iso-8601" : "2023-05-10T17:15+0530"
        },
        "last-modifier" : "admin",
        "creation-time" : {
          "posix" : 1683719146105,
          "iso-8601" : "2023-05-10T17:15+0530"
        },
        "creator" : "admin"
      },
      "read-only" : false,
      "available-actions" : {
        "edit" : "true",
        "delete" : "true",
        "clone" : "true"
      }
    }, {
      "uid" : "f04b042d-0a37-4a10-b470-08ca0e18a129",
      "name" : "workrrorxzdg",
      "type" : "group",
      "domain" : {
        "uid" : "41e821a0-3720-11e3-aa6e-0800200c9fde",
        "name" : "SMC User",
        "domain-type" : "domain"
      },
      "members" : [ "11c758bf-15d7-47ba-af1a-200ffa171587" ],
      "groups" : [ ],
      "comments" : "",
      "color" : "black",
      "icon" : "General/group",
      "tags" : [ ],
      "meta-info" : {
        "lock" : "unlocked",
        "validation-state" : "ok",
        "last-modify-time" : {
          "posix" : 1683719351164,
          "iso-8601" : "2023-05-10T17:19+0530"
        },
        "last-modifier" : "admin",
        "creation-time" : {
          "posix" : 1683719351164,
          "iso-8601" : "2023-05-10T17:19+0530"
        },
        "creator" : "admin"
      },
      "read-only" : false,
      "available-actions" : {
        "edit" : "true",
        "delete" : "true",
        "clone" : "true"
      }
    } ],
    "comments" : "",
    "color" : "black",
    "icon" : "Objects/host",
    "tags" : [ ],
    "meta-info" : {
      "lock" : "unlocked",
      "validation-state" : "ok",
      "last-modify-time" : {
        "posix" : 1683514434876,
        "iso-8601" : "2023-05-08T08:23+0530"
      },
      "last-modifier" : "admin",
      "creation-time" : {
        "posix" : 1683514434876,
        "iso-8601" : "2023-05-08T08:23+0530"
      },
      "creator" : "admin"
    },
    "read-only" : false,
    "available-actions" : {
      "edit" : "true",
      "delete" : "true",
      "clone" : "true"
    }
  } ]
}

期望输出

BL_2.2.2.2,11c758bf-15d7-47ba-af1a-200ffa171587,host,2.2.2.2,66.66.66.66,,All,hide,network11111,workrrorxzdg

问题原因

失败的合并命令中,\(.groups[]?.name)试图在字符串插值里直接迭代数组元素,这会导致jq将每个组名单独生成一条记录,而非将所有组名拼接成逗号分隔的字符串,最终无法得到期望的单行结果。

修正后的命令

方式1(字符串插值拼接)

将组名数组先提取再拼接成字符串,嵌入原有字段串:

jq -r '.objects[] | "\(.name),\(.uid),\(.type),\(.\"ipv4-address\"),\(.\"nat-settings\".\"ipv4-address\"),\(.\"nat-settings\".\"ipv6-address\"),\(.\"nat-settings\".\"install-on\"),\(.\"nat-settings\".method)\(if .groups then "," + (.groups | map(.name) | join(",")) else "" end)"'

方式2(数组拼接后统一join)

将所有需要的字段放入数组,再合并组名数组,最后统一用逗号连接:

jq -r '.objects[] | [.name, .uid, .type, ."ipv4-address", ."nat-settings"."ipv4-address", ."nat-settings"."ipv6-address", ."nat-settings"."install-on", ."nat-settings".method] + (.groups | map(.name)) | join(",")'

验证结果

执行任意一个修正后的命令,都会输出与期望完全一致的单行结果:

BL_2.2.2.2,11c758bf-15d7-47ba-af1a-200ffa171587,host,2.2.2.2,66.66.66.66,,All,hide,network11111,workrrorxzdg

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 13:32:01