JQ:如何使用jq选取的数据创建JSON对象?

卡里克

我有一个复杂的JSON文件,其中包含数百个“属性”,其类型由“ objectTypeAttributeId”标识。

我知道objectTypeAttributeId = 328表示tickedid,objectTypeAttributeId = 329包含主机名数组等。

有文件的简化版本:

{
  "objectEntries": [
    {
      "attributes": [
        {
          "id": 279792,
          "objectTypeAttributeId": 328,
          "objectAttributeValues": [
            {
              "displayValue": "ITSM-24210"
            }
          ]
        },
        {
          "id": 279795,
          "objectTypeAttributeId": 329,
          "objectAttributeValues": [
            {
              "displayValue": "testhost1"
            },
            {
              "displayValue": "testhost2"
            }
          ]
        },
        {
          "id": 279793,
          "objectTypeAttributeId": 330,
          "objectAttributeValues": [
            {
              "displayValue": "28.02.2020 11:45"
            }
          ]
        }
      ]
    }
  ]
}

我需要使用类似以下格式的输入JSON(根据“ objectTypeAttributeId”值)挑选出的特定值来创建输出JSON:

{
    "tickets": [
        {
            "ticketid": "ITSM-24210",
            "hostnames": ["testhost1", "testhost2"],
            "date": "28.02.2020 11:45"
        }
    ]
}

我是jq的新手,在XSLT中,可以使用带有占位符的静态模板来解决所选值。

我尝试过这种方法,有我的jq过滤器:

.objectEntries[].attributes[] |
  {ticketid: select(.objectTypeAttributeId == 328) | .objectAttributeValues[0].displayValue},
  {hostnames: select(.objectTypeAttributeId == 329) | [.objectAttributeValues[].displayValue]},
  {date: select(.objectTypeAttributeId == 330) | .objectAttributeValues[0].displayValue}

但是这种方法的结果是:

{
  "ticketid": "ITSM-24210"
}
{
  "hostnames": [
    "testhost1",
    "testhost2"
  ]
}
{
  "date": "28.02.2020 11:45"
}

我随后进行的所有格式化输出的尝试都将以损坏的jq过滤器或不返回任何内容的过滤器结束。

请任何想法如何解决这个问题?

oguz ismail

假设要为每个对象条目生成票证:

{tickets: [
  .objectEntries[]
  | [.attributes[]
    | [.objectTypeAttributeId,
      (.objectAttributeValues | map(.displayValue))] as [$id, $val]
    |   if $id == 328 then {ticketId:  $val[0]}
      elif $id == 329 then {hostnames: $val}
      elif $id == 330 then {date:      $val[0]}
      else empty end
  ] | add
]}

在线演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章