JOLT Flatten 数组和嵌套对象

JOLT Flatten array and nested object

给出以下 JSON

{
  "id": "1234",
  "recordType": "E",
  "receiveDate": "2009-01-01",
  "receiveTime": "09:55:00",
  "releaseDate": "2009-01-02",
  "releaseTime": "08:30:00",
  "classifications": [
    {
      "reportType": 1031435,
      "description": {
        "string": "Progress Report"
      }
    },
    {
      "reportType": 1031435,
      "description": {
        "string": "Net Tangible Asset Backing"
      }
    }
  ],
  "type": "ASX"
}

我需要将其转换为

{
  "id": "1234",
  "recordType": "E",
  "classifications": [
    {
      "reportType": 1031435,
      "description": "Progress Report"
    },
    {
      "reportType": 1031435,
      "description": "Net Tangible Asset Backing"
    }
  ],
  "type": "ASX"
}

我很难弄清楚如何使用 Jolt 实现这一点,或者它是否可能。

非常感谢您的帮助。 罗恩·米尔恩

您可以使用 shift 转换,例如

[
  {
    "operation": "shift",
    "spec": {
      "id": "&",
      "recordT*": "&",
      "class*": {
        "*": {
          "reportT*": "&2[&1].&",
          "desc*": {
            "*": "&3[&2].&1"
          }
        }
      },
      "type": "&"
    }
  }
]

其中 * 通配符用于缩写每个键名称的整个文字,例如 reportT* 表示reportType,单个 * 通配符代表 others(else case)

首先,我们通过使用 "classifications" 键后的 "*": { 到达整个 JSON 值的最内层属性( "string":... ),以便遍历索引它。 "&" 通配符复制相应属性的每个值,&3&2 用于复制数组的名称 (classifications),方法是向上移动 2 或 3 级并获取每个字面值,[&1][&2] 用于确定构造数组对象的公因数。

站点 http://jolt-demo.appspot.com/ 上的演示是

编辑 :如果您的目标是 为缺少的数组元素分配默认值 ,请将 "reportT*": "&2[&1].&" 替换为"*": "&2[&1].&" 考虑到数组 classifications 的元素多于当前状态的情况。