Azure Logic应用程序中的JSON对象 [英] JSON Object in Azure Logic Apps

查看:25
本文介绍了Azure Logic应用程序中的JSON对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请帮帮忙。

我们收到不同格式的订单,并转换为JSON进行处理并转换到我们的API。

请参见示例:

[
  {
    "Order Number": "10188",
    "Order Date": "05/06/2021",
    "SKU": "LW80S",
    "Quantity": "3"
  },
  {
    "Order Number": "10187",
    "Order Date": "05/06/2021",
    "SKU": "LW90L",
    "Quantity": "1"
  },
  {
    "Order Number": "10187",
    "Order Date": "05/06/2021",
    "SKU": "LW80S",
    "Quantity": "1"
  },
  {
    "Order Number": "10187",
    "Order Date": "05/06/2021",
    "SKU": "CCDW12",
    "Quantity": "1"
  },
  {
    "Order Number": "10187",
    "Order Date": "05/06/2021",
    "SKU": "CSS",
    "Quantity": "1"
  }
]

如您所见,同一订单&10187&q;的多行转换已创建多个对象。

因此,我需要将上面的输出转换为以下内容:

"Order": {
      "OrderNumber": "10187",
      "TotalUnits": "4",
      "OrderLine": [
         {
            "OrderedQty": "1",
            "Product": "LW90L",
         },
                  {
            "OrderedQty": "1",
            "Product": "LW80S",
         },
                  {
            "OrderedQty": "1",
            "Product": "CCDW12",
         },
        {
            "OrderedQty": "1",
            "Product": "CSS",
         }
      ]
      }

因此按订单号分组。你能告诉我怎样才能做到吗?

推荐答案

首先构造一个Dictionary<string, List<OrderItem>>作为查找来存储关键字为Order Number的分组,然后执行该操作只是迭代并将其映射到所需的原始形状。

这是一个有效的.NET fiddle

using System;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
                    
public class Order
{
    [JsonProperty("Order Number")]
    public string OrderNumber { get; set; }
    
    [JsonProperty("Order Date")]
    public string OrderDate { get; set; }
    
    [JsonProperty("SKU")]
    public string SKU { get; set; }
    
    [JsonProperty("Quantity")]
    public string Quantity { get; set; }
}

public class OrderBase
{
    public OrderItem Order { get; set; }
}
public class OrderItem
{
    public string OrderNumber { get; set; }
    public string TotalUnits { get; set; }
    public IEnumerable<OrderLine> OrderLines { get; set; }
}
public class OrderLine
{
    public string OrderedQty { get; set; }
    public string Product { get; set; }
}

public class Program
{

    public static void Main(string[] args)
    {
        string input = @"[{""Order Number"":""10188"",""Order Date"":""05/06/2021"",""SKU"":""LW80S"",""Quantity"":""3""},{""Order Number"":""10187"",""Order Date"":""05/06/2021"",""SKU"":""LW90L"",""Quantity"":""1""},{""Order Number"":""10187"",""Order Date"":""05/06/2021"",""SKU"":""LW80S"",""Quantity"":""1""},{""Order Number"":""10187"",""Order Date"":""05/06/2021"",""SKU"":""CCDW12"",""Quantity"":""1""},{""Order Number"":""10187"",""Order Date"":""05/06/2021"",""SKU"":""CSS"",""Quantity"":""1""}]";
        
        List<Order> orders = JsonConvert.DeserializeObject<List<Order>>(input);
        Dictionary<string, List<OrderLine>> lookup = new Dictionary<string, List<OrderLine>>();
        
        // Group into lookup
        foreach (Order item in orders)
        {
            OrderLine newItem = new OrderLine
            {
                Product = item.OrderNumber,
                OrderedQty = item.Quantity
            };
            
            if (!lookup.ContainsKey(item.OrderNumber))
            {
                lookup[item.OrderNumber] = new List<OrderLine> { newItem };
            }
            else
            {
                lookup[item.OrderNumber].Add(newItem);
            }
        }
        
        // Mapping the groupings to the desired shape in the output
        List<OrderBase> results = new List<OrderBase>();
        foreach (var kvp in lookup)
        {
            results.Add(
                new OrderBase
                {
                    Order = new OrderItem
                    {
                        OrderNumber = kvp.Key,
                        TotalUnits = kvp.Value.Count.ToString(),
                        OrderLines = kvp.Value
                    }
                }
            );
        }
        
        Console.WriteLine("Response - {0}", JsonConvert.SerializeObject(results, Formatting.Indented));
    }
}

这篇关于Azure Logic应用程序中的JSON对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆