簡體   English   中英

Azure 邏輯應用程序中的 JSON Object

[英]JSON Object in Azure Logic Apps

有人請幫忙。

我們收到不同格式的訂單並轉換為 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”有多行,轉換為 JSON 已創建多個對象。

所以我需要把上面的output 轉換成下面的:

"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 ,然后發布這樣做只是迭代和 map 它到你想要的原始形狀。

這是一個有效的.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));
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM