将 json 值重塑为值内容

Reshape json values to value content

我不确定这对 jq 是否可行,但如果是的话我会很高兴。

我收到的数据必须转换为我使用的工具构建参数。

一个工具需要以下字符串作为参数(它不是 json 或 json 对象 - 简单字符串):

-parameter="{<IP>,[<NAME>,<ALIAS>],<COMMENT>}"

我收到的源数据是 json 看起来像这样

    {
      "MAINSERVER": {
        "COMMENT": "Server",
        "IP": "1.1.1.1",
        "NAME": "Server1",
        "VERSION": "19.4"
      },
      "DATASERVER": [
        {
          "ALIAS": "alias02",
          "IP": "1.1.1.2",
          "NAME": "server02"
        },
        {
          "ALIAS": "alias03",
          "IP": "1.1.1.3",
          "NAME": "server03"
        }
      ]
    }

我想将 DATASERVER 中的每个对象数组转换为字符串并将其推送到关键参数。

{
  "parameter": [
    "{1.1.1.2,[server02,alias02],staticComment}",
    "{1.1.1.3,[server03,alias03],staticComment}"
  ]
}   

非常感谢任何支持。

好的,我自己搞定了。我认为它更复杂。

这是我的查询

.DATASERVER  | map((\"{\" + .NAME + \",[\"  + .IP + \",\"  + .ALIAS + \"]}\") ) | {parameter: [.] }

结果

{
    "parameter": [
        [
            "{server02,[1.1.1.2,alias02]}",
            "{server03,[1.1.1.3,alias03]}"
        ]
    ]
}

生成问题的示例输出

{parameter: .DATASERVER | map("{\(.IP),[\(.NAME),\(.ALIAS)],staticComment}")}
{
  "parameter": [
    "{1.1.1.2,[server02,alias02],staticComment}",
    "{1.1.1.3,[server03,alias03],staticComment}"
  ]
}

Demo


以更简单的方式从您自己的解决方案生成输出

{parameter: [.DATASERVER | map("{\(.NAME),[\(.IP),\(.ALIAS)]}")]}
{
  "parameter": [
    [
      "{server02,[1.1.1.2,alias02]}",
      "{server03,[1.1.1.3,alias03]}"
    ]
  ]
}

Demo

从给定的模板开始,您可以编写:

jq --arg parameter "{<IP>,[<NAME>,<ALIAS>],<COMMENT>}" '
 [.DATASERVER[] as $l
  | $parameter 
  | sub("<IP>"; $l.IP)
  | sub("<NAME>"; $l.NAME) 
  | sub("<ALIAS>"; $l.ALIAS)
  | sub("<COMMENT>"; $l.COMMENT // "staticComment") ]
 | {parameter: .}
'