【问题标题】:Combine objects in an array based on common key values in Logic Apps根据逻辑应用中的常用键值组合数组中的对象
【发布时间】:2021-07-23 17:49:35
【问题描述】:

所以我有一个 API 的输出,看起来像这样

[
{
    "SalesOrderType": "OR",
    "SalesOrganization": "1710",
    "DistributionChannel": "10",
    "OrganizationDivision": "00",
    "SoldToParty": "17100002",
    "TransactionCurrency": "USD",
    "PurchaseOrderByCustomer": "SalesOrder Simulate 1",
    "to_Item": "",
    "SalesOrderItem": "10",
    "Material": "TG22",
    "RequestedQuantity": "1"
},
{
    "SalesOrderType": "OR",
    "SalesOrganization": "1710",
    "DistributionChannel": "10",
    "OrganizationDivision": "00",
    "SoldToParty": "17100002",
    "TransactionCurrency": "USD",
    "PurchaseOrderByCustomer": "SalesOrder Simulate 1",
    "to_Item": "",
    "SalesOrderItem": "20",
    "Material": "TG0011",
    "RequestedQuantity": "1"
},
{
    "SalesOrderType": "OR",
    "SalesOrganization": "1710",
    "DistributionChannel": "10",
    "OrganizationDivision": "00",
    "SoldToParty": "17100010",
    "TransactionCurrency": "USD",
    "PurchaseOrderByCustomer": "SalesOrder Simulate 2",
    "to_Item": "",
    "SalesOrderItem": "10",
    "Material": "TG0011",
    "RequestedQuantity": "2"
},
{
    "SalesOrderType": "OR",
    "SalesOrganization": "1710",
    "DistributionChannel": "10",
    "OrganizationDivision": "00",
    "SoldToParty": "17100010",
    "TransactionCurrency": "USD",
    "PurchaseOrderByCustomer": "SalesOrder Simulate 2",
    "to_Item": "",
    "SalesOrderItem": "20",
    "Material": "TG22",
    "RequestedQuantity": "3"
},
{
    "SalesOrderType": "OR",
    "SalesOrganization": "1710",
    "DistributionChannel": "10",
    "OrganizationDivision": "00",
    "SoldToParty": "17100010",
    "TransactionCurrency": "USD",
    "PurchaseOrderByCustomer": "SalesOrder Simulate 3",
    "to_Item": "",
    "SalesOrderItem": "10",
    "Material": "TG22",
    "RequestedQuantity": "1"
}]

现在我想要的是将所有具有相同“PurchaseOrderByCustomer”的对象合并到一个具有嵌套数组的数组中,如下所示:

[
{
    "SalesOrderType": "OR",
    "SalesOrganization": "1710",
    "DistributionChannel": "10",
    "OrganizationDivision": "00",
    "SoldToParty": "17100002",
    "TransactionCurrency": "USD",
    "PurchaseOrderByCustomer": "SalesOrder Simulate 1",
    "to_Item": [
        {
             "SalesOrderItem": "10",
             "Material": "TG22",
             "RequestedQuantity": "1"
        },
        {
         "SalesOrderItem": "20",
             "Material": "TG0011",
             "RequestedQuantity": "1"
        }
        ]
},
{
    "SalesOrderType": "OR",
    "SalesOrganization": "1710",
    "DistributionChannel": "10",
    "OrganizationDivision": "00",
    "SoldToParty": "17100010",
    "TransactionCurrency": "USD",
    "PurchaseOrderByCustomer": "SalesOrder Simulate 2",
    "to_Item": [
        {
         "SalesOrderItem": "10",
             "Material": "TG0011",
                 "RequestedQuantity": "2"
        },
        {
             "SalesOrderItem": "20",
             "Material": "TG22",
             "RequestedQuantity": "3"
        }
        ]
},
{
    "SalesOrderType": "OR",
    "SalesOrganization": "1710",
    "DistributionChannel": "10",
    "OrganizationDivision": "00",
    "SoldToParty": "17100010",
    "TransactionCurrency": "USD",
    "PurchaseOrderByCustomer": "SalesOrder Simulate 3",
    "to_Item": [
        {
             "SalesOrderItem": "10",
             "Material": "TG22",
             "RequestedQuantity": "1"
        }
        ]
}]

所以一个销售订单可以有多个项目,一个销售订单需要是我需要进一步处理订单的格式的一个对象。现在我想在逻辑应用程序中执行此操作,并且我尝试了几种方法,但我完全迷失了方向,甚至不确定这是否可以在逻辑应用程序中完成。

我想知道我需要的东西是否可以在逻辑应用中实现

【问题讨论】:

  • 尝试编写一个简单的 JS 代码来完成上述实际到预期的转换。代码准备好后,您可以使用 Logic Apps 的内置 Inline Code 操作(目前仅支持 JS)执行该代码。见here

标签: arrays json multidimensional-array key azure-logic-apps


【解决方案1】:

正如cmets中提到的Nikhil Vartak,你可以使用Inline Code来达到你的目的:

你可以参考我的代码:

var jsonString=<your-json>;
var pur=[];
for(var i=0;i<Object.keys(jsonString).length;i++){
    pur.push(jsonString[i].PurchaseOrderByCustomer);
}
var arr=[...new Set(pur)];
var array=[];
var num;
var jsonArray=[];
for(var i=0;i<arr.length;i++){
    var purchaseOrder = arr[i];
    for(var j = 0; j < Object.keys(jsonString).length; j++){
        var item = jsonString[j];
        if(item.PurchaseOrderByCustomer == purchaseOrder){
            var to = {"SalesOrderItem": item.SalesOrderItem,"Material": item.Material,"RequestedQuantity": item.RequestedQuantity};
            array.push(to);
        }
    }
for(var j = 0;j<Object.keys(jsonString).length;j++){
    if(jsonString[j].PurchaseOrderByCustomer==purchaseOrder){
        num=j;
        break;
    }
}
var item=jsonString[num];
item.to_Item=array;
delete item['SalesOrderItem'];
delete item['Material'];
delete item['RequestedQuantity'];
jsonArray.push(item);
array=[];
}
return jsonArray;

我做了一些测试,结果似乎没有问题:

注意:

如果您在Azure Logic App 中使用Inline Code,则需要添加integration accounts

【讨论】:

  • 这是我的问题的解决方案,非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-23
  • 2012-12-19
  • 2019-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多