![](/img/trans.png)
[英]Iterating Through and Checking JSON Object Properties using Azure Logic Apps
[英]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.