需要 Jolt 规范将带有动态字段的输入 json 转换为输出 json

问题描述 投票:0回答:1

我需要以下输入 json 的 jolt 规范,其中包含动态日期字段和项目数组。该 jolt 规范应该将此输入 json 转换为下面的输出 json。

输入Json:

  "market": {
    "2024-04-13": [
      {
        "code": "ABC",
        "name": "Name1",
        "date": "2024-04-13T00:00:00.000Z",
        "rev": 100,
        "sold": 1
      }
    ],
    "2024-04-14": [
      {
        "code": "DEF",
        "name": "Name2",
        "date": "2024-04-14T00:00:00.000Z",
        "rev": 233.32,
        "sold": 3
      },
      {
        "code": "EFG",
        "name": "DISCOUNT",
        "date": "2024-04-14T00:00:00.000Z",
        "rev": 300.05,
        "sold": 1
      },
      {
        "code": "MNO",
        "name": "GROUP",
        "date": "2024-04-14T00:00:00.000Z",
        "rev": 45.33,
        "sold": 3
      }
    ],
    "2024-04-15": [
      {
        "code": "POR",
        "name": "TEST",
        "date": "2024-04-15T00:00:00.000Z",
        "rev": 100,
        "sold": 1
      }
    ]
  }
}

输出json

{
  "market": {
    "DATE": [
      {
        "code": "ABC",
        "name": "Name1",
        "date": "2024-04-13T00:00:00.000Z",
        "rev": 100,
        "sold": 1
      },
      {
        "code": "DEF",
        "name": "Name2",
        "date": "2024-04-14T00:00:00.000Z",
        "rev": 233.32,
        "sold": 3
      },
      {
        "code": "EFG",
        "name": "DISCOUNT",
        "date": "2024-04-14T00:00:00.000Z",
        "rev": 300.05,
        "sold": 1
      },
      {
        "code": "MNO",
        "name": "GROUP",
        "date": "2024-04-14T00:00:00.000Z",
        "rev": 45.33,
        "sold": 3
      },
      {
        "code": "POR",
        "name": "TEST",
        "date": "2024-04-15T00:00:00.000Z",
        "rev": 100,
        "sold": 1
      }
    ]
  }
}

我尝试了下面的 Jolt 规范,但它没有给我准确的输出。它对前几个项目进行分组,但我需要它们分别类似于输出 json。

震动规格

[
 {
   "operation": "shift",
   "spec": {
     "market": {
       "*": {
         "*": {
           "code": "market[&1].code",
           "name": "market[&1].name",
           "date": "market[&1].date",
           "rev": "market[&1].rev",
           "sold": "market[&1].sold"
         }
       }
     }
   }
 }
]

arrays json dynamic jolt
1个回答
0
投票

您应该将这些日期与子索引值(0,1,2)相结合来分隔,以便能够区分所有子对象,例如

[
  {
    "operation": "shift",
    "spec": {
      "*": { //lhe layer for the "market"
        "*": { //the layer for the arrays
          "*": { //the layer for the indexes of the arrays
            "*": "&3.&2_&1.&"
          }
        }
      }
    }
  },
  { //arrange the key names of the outermost objects
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "*": "&2[#2].&"
        }
      }
    }
  }
]
© www.soinside.com 2019 - 2024. All rights reserved.