Пакет SISS не извлекает все записи из API в базу данныхC#

Место общения программистов C#
Anonymous
Пакет SISS не извлекает все записи из API в базу данных

Сообщение Anonymous »

Я пытаюсь переместить данные из Json Rest API в свою базу данных. Я использую задачу потока данных с задачей сценария в качестве источника и OLE DB в качестве назначения.
Пример данных

Код: Выделить всё

{
"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"}
]
}
Я хочу переместить в базу данных только данные столбца1, столбца2 и столбца3.

Код: Выделить всё

    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);
}
}
}
Приведенный выше код извлекает только первый элемент списка («столбец1»: «100», «столбец2»: «1000», «столбец3»: «Тип A»). Как можно Я получу все элементы из этого списка?

Подробнее здесь: https://stackoverflow.com/questions/790 ... o-database

Вернуться в «C#»