Newtonsoft Json nested tables in csv umwandeln - C Sharp
Hallo,
ich habe aktuell das Problem, dass ich ein Json des Typs
mittels der Newtonsoft Json Library in eine CSV umwandeln muss. Nur machen mir die Arrays bei "shared_with" Probleme.
Das Problem ist nun sehr offensichtlich, die Konvertierung nimmt die Inneren Tabellen und nicht die äußere.
Ein Problem ist auch, dass ich in einer CSV keine Tabelle in einer Tabelle haben kann.
Hierfür habe ich auch noch keine Lösung.
Kann mir hierbei jemand helfen?
Mein Programmcode:
ich habe aktuell das Problem, dass ich ein Json des Typs
{
"groups": [
{
"id": "111111111",
"name": "DummyName",
"shared_with": [
{
"userid": "222222221",
"name": "Username1",
"alias": "",
"permissions": "read"
}
],
"permissions": "owned"
},
{
"id": "111111112",
"name": "DummyNameZwei",
"shared_with": [
{
"userid": "222222221",
"name": "Username1",
"alias": "",
"permissions": "read"
},
{
"userid": "222222222",
"name": "Username2",
"permissions": "read"
}
],
"permissions": "owned"
}
]
}
Das Problem ist nun sehr offensichtlich, die Konvertierung nimmt die Inneren Tabellen und nicht die äußere.
userid name alias permissions groups_Id
Ein Problem ist auch, dass ich in einer CSV keine Tabelle in einer Tabelle haben kann.
Hierfür habe ich auch noch keine Lösung.
Kann mir hierbei jemand helfen?
Mein Programmcode:
using System;
using System.Xml;
using System.Text;
using Newtonsoft.Json;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace CreateSession.Helper
{
public static class jsonToCsv
{
public static string getCsv(string jsonString) //jsonString As FormatedJsonString
{
XmlNode xml = JsonConvert.DeserializeXmlNode("{records:{record:" + jsonString + "}}");
XmlDocument xmldoc = new XmlDocument();
//Create XmlDoc Object
xmldoc.LoadXml(xml.InnerXml);
//Create XML Steam
var xmlReader = new XmlNodeReader(xmldoc);
DataSet dataSet = new DataSet();
//Load Dataset with Xml
dataSet.ReadXml(xmlReader);
//return single table inside of dataset
string csv = "";
//only the last table has data
csv = ToCSV(dataSet.Tables[dataSet.Tables.Count - 1], "\t"); //Excel uses TabStop by default for csv
return csv;
}
private static string ToCSV(this DataTable table, string delimator)
{
var result = new System.Text.StringBuilder();
for (int i = 0; i < table.Columns.Count; i++)
{
result.Append(table.Columns[i].ColumnName);
result.Append(i == table.Columns.Count - 1 ? "\n" : delimator);
}
foreach (DataRow row in table.Rows)
{
for (int i = 0; i < table.Columns.Count; i++)
{
result.Append(row[i].ToString());
result.Append(i == table.Columns.Count - 1 ? "\n" : delimator);
}
}
return result.ToString().TrimEnd(new char { '\r', '\n' });
}
}
}
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 281826
Url: https://administrator.de/contentid/281826
Ausgedruckt am: 22.11.2024 um 02:11 Uhr
1 Kommentar
Hallo,
ich würde das in der CSV folgendermaßen abstrahieren:
Da du hier ja anscheinend Gruppen mit mehreren Mitgliedern hast würde ich also einmal den Knoten Groups mit einer Schleife durchlaufen, und dann innerhalb dieser Schleife eine weitere die die Mitglieder shared_with der Gruppe ausliest.
In der CSV stellst du das dann so dar das pro User jeweils eine weitere Zeile mit den selben Gruppendaten erstellt wird, d.h. das die CSV dann quasi auszugsweise für deine beiden Gruppen so aussieht:
Das ist mit den zwei verschachtelten Schleifen problemlos machbar, und ist eine gängige Methode sowas mit einer CSV darzustellen.
Gruß grexit
ich würde das in der CSV folgendermaßen abstrahieren:
Da du hier ja anscheinend Gruppen mit mehreren Mitgliedern hast würde ich also einmal den Knoten Groups mit einer Schleife durchlaufen, und dann innerhalb dieser Schleife eine weitere die die Mitglieder shared_with der Gruppe ausliest.
In der CSV stellst du das dann so dar das pro User jeweils eine weitere Zeile mit den selben Gruppendaten erstellt wird, d.h. das die CSV dann quasi auszugsweise für deine beiden Gruppen so aussieht:
Gruppe_id;Gruppe_name;shared_with_id;shared_with_name
111111111;DummyName;222222221;Username1
111111112;DummyNameZwei;222222221;Username1
111111112;DummyNameZwei;222222222;Username2
Gruß grexit