Пример данных
Код: Выделить всё
{
"Id": 1,
"Name": "Project A",
"owner": "User A",
"status": "Active",
"listedItems": [
{"column1": "100", "column2": "1000", "column3": "Type A"},
{"column1": "200", "column2": "2000", "column3": "Type B"},
{"column1": "300", "column2": "3000", "column3": "Type C"}
]
}
Код: Выделить всё
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
using System.Collections.Generic;
using System.IO;
using System.Net;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.Tab;
using System.Text.RegularExpressions;
public class ScriptMain : UserComponent
{
public override void CreateNewOutputRows()
{
// Specify the security protocol
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
// Define the API URL
string apiUrl = "URL"; // Update with your actual API URL
string apiKey = "apiKey";
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(apiUrl);
request.Method = "GET";
request.Headers["Authorization"] = "Bearer " + apiKey;
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
string jsonResponse = reader.ReadToEnd();
ParseInventoryItems(jsonResponse);
}
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("Error: " + ex.Message);
}
}
private void ParseInventoryItems(string jsonResponse)
{
try
{
// Extract inventory items as before
string pattern = "\"listedItems\":\\[(.*?)\\]";
Match match = Regex.Match(jsonResponse, pattern);
if (match.Success)
{
string listedItemsContent = match.Groups[1].Value;
var items = listedItemsContent.Split(new string[] { "},{" }, StringSplitOptions.None);
int rowCount = 0; // Count of rows added
foreach (var item in items)
{
string cleanedItem = item.Replace("{", "").Replace("}", "").Trim();
var keyValuePairs = cleanedItem.Split(',');
Output0Buffer.AddRow(); // Add a new row
// Initialize values
Output0Buffer.column1 = string.Empty;
Output0Buffer.column2 = string.Empty;
Output0Buffer.column3 = string.Empty;
// Parse key-value pairs
foreach (var pair in keyValuePairs)
{
var keyValue = pair.Split(':');
if (keyValue.Length != 2) continue;
string key = keyValue[0].Trim().Trim('"');
string value = keyValue[1].Trim().Trim('"');
// Set output buffer values
if (key.Equals("column1", StringComparison.OrdinalIgnoreCase))
{
Output0Buffer.column1 = value;
}
else if (key.Equals("column2", StringComparison.OrdinalIgnoreCase))
{
Output0Buffer.column2 = value;
}
else if (key.Equals("tcolum3", StringComparison.OrdinalIgnoreCase))
{
Output0Buffer.column3 = value;
}
}
rowCount++; // Increment row count
// Log the current row information
}
// Final log of total rows processed
System.Diagnostics.Debug.WriteLine($"Total Rows Processed: {rowCount}");
}
else
{
System.Diagnostics.Debug.WriteLine("No listedItems found in JSON response.");
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("Error parsing inventory items: " + ex.Message);
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... o-database