根据逻辑应用程序中的公共键值组合数组中的对象

Combine objects in an array based on common key values in Logic Apps

所以我有一个 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"
        }
        ]
}]

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

我想知道我需要的东西在 Logic Apps 中是否可行

如评论中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