当前位置: 首页 > 知识库问答 >
问题:

使用Jolt变换将Flat json转换为具有多个数组的Nested json

徐承载
2023-03-14

我正在尝试编写一个规范来使用jolt转换进行以下转换。我需要将平面json转换为嵌套的json

我在将平面JSON转换为嵌套JSON时遇到了一些麻烦。我看了一些例子,没有更接近上面提到的内容。我需要使用JOLT规范转换JSON结构。我使用https://jolt-demo.appspot.com来测试下面的内容。

输入:

[
  {
    "container_id": "a",
    "carrier_scac": "b",
    "location": "banglore",
    "state": "karnataka",
    "country": "India"
  },
  {
    "container_id": "a",
    "carrier_scac": "b",
    "location": "pune",
    "state": "maharashtra",
    "country": "India"
  },
  {
    "container_id": "c",
    "carrier_scac": "d",
    "location": "dharwad",
    "state": "kan",
    "country": "India"
  },
  {
    "container_id": "c",
    "carrier_scac": "d",
    "location": "hubli",
    "state": "kant",
    "country": "India"
  }
]

期望输出:

[
  {
    "load": {
      "container_id": "a",
      "carrier_scac": "b",
      "stops": [
        {
          "location": "banglore",
          "state": "karnataka"
        },
        {
          "location": "pune",
          "state": "maharashtra"
        }
      ]
    },
    "containerInfo": {
      "country": "India"
    }
  },
  {
    "load": {
      "container_id": "c",
      "carrier_scac": "d",
      "stops": [
        {
          "location": "dharwad",
          "state": "kan"
        },
        {
          "location": "hubli",
          "state": "kant"
        }
      ]
    },
    "containerInfo": {
      "country": "India"
    }
  }
]

我使用的Jolt Spec:

json prettyprint-override">[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "container_id": "@(1,container_id).&",
        "carrier_scac": "@(1,container_id).&",
        "*": "@(1,container_id).stops[&1].&"
      }
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": "=recursivelySquashNulls"
    }
  },
  {
    "operation": "cardinality",
    "spec": {
      "*": {
        "container_id": "ONE",
        "carrier_scac": "ONE"
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": ""
    }
  }
]

共有1个答案

竺绍辉
2023-03-14

目前的规范还不错,只需要一些小的修改,比如添加load容器信息节点,并如下所示缩短一点

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": "@(1,container_id).load.stops[&1].&", // "else" case
        "country": "@(1,container_id).load.containerInfo.&",
        "c*": "@(1,container_id).load.&" // the attributes starting with "c" but other than "country" 
      }
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": "=recursivelySquashNulls"
    }
  },
  {
    "operation": "cardinality",
    "spec": {
      "*": {
        "*": {
          "c*": "ONE", 
          "containerInfo": {
            "*": "ONE"
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": ""
    }
  }
]
 类似资料:
  • 我必须将 JSON 输入转换为包含一个对象的数组。 我有这个 JOLT 配置: 以下是我的意见: 实际产量: 期望的输出: 你知道该怎么做吗? 谢谢你们的帮助

  • 我遇到了一个问题,使用颠簸转换将平面 JSON 转换为嵌套 JSON。而且我对颠簸转型很陌生。输入和输出详细信息如下。 我的输入: 预期产量

  • 我试图写一个规范来使用jolt转换完成下面的转换。我需要将平面JSON转换成嵌套JSON。 输入数据: 我在将平面JSON转换为嵌套JSON时遇到了一些问题。这里,我希望基于stoptype属性聚合数据,并且需要针对唯一的有效负载进行聚合。我用https://jolt-demo.appspot.com来测试以下内容。 输出: 你能帮我完成这个预期的输出吗?

  • 我对震动有点陌生,一直在努力进行正确的转变。任何帮助都很感激。这是我的输入数据: 我的目标是创建一个包含所有条目的数组。对于本例,将有2个条目(长度与)相同。数组(键)和(值)是1:1映射的,即它们应该具有相同的长度。 这是预期的输出:

  • 尝试转换如下内容时,我为转换后的对象获取了一个空值: 对此: 这是我使用的规范: 这是我使用的代码: 我能够使用与上述相同的规范和代码成功转换以下输入: 那么,我需要做什么来转换员工对象数组呢?

  • Jolt对我来说是新的,我一直在与这个问题作斗争,直到我创建这篇文章。 我想把这个: 进入这个 每个属性的值可以是1值,也可以是未知数量值的数组。 我将以下json更改为第一个json中的内容: RHS上的属性名称是通用的,属性值的数量也可能不同。提前感谢您抽出时间来帮助我。