2 Pluspunkte 0 Minuspunkte

Statt jedes Feld (Name, Wert) manuell einzutragen

JObject data = JObject.Parse(output.Trim()); 

dataGridView1.Rows.Clear();

dataGridView1.Rows.Add("Caption", data.SelectToken("Caption"));
dataGridView1.Rows.Add("Manufacturer", data.SelectToken("Manufacturer")); 
dataGridView1.Rows.Add("Model", data.SelectToken("Model")); 
dataGridView1.Rows.Add("PrimaryOwnerName", data.SelectToken("PrimaryOwnerName"));

trage ich jedes Feld in einer Schleife automatisch ein.

foreach (var item in data)
{
    dataGridView1.Rows.Add(item.Key, item.Value);
}

Was ist aber wenn das JSON Element selbst ein Array oder ein Objekt beinhaltet? Kann ich das auch automatisch in einem Datagridview anzeigen?

von  

1 Antwort

0 Pluspunkte 0 Minuspunkte

Du kannst das Objekt abflachen und redundante Einträge mit einem Prefix indexieren. Hier ist eine rekursive Funktion um ein JSON Objekt in eine flache Hierarchie umzuwandeln.

void FlattenJson(JToken token, string prefix)
{
    if (token is JObject obj)
    {
        foreach (var prop in obj.Properties())
        {
            FlattenJson(prop.Value, prefix + prop.Name + ".");
        }
    }
    else if (token is JArray array)
    {
        int index = 0;
        foreach (var item in array)
        {
            FlattenJson(item, $"{prefix}[{index}].");
            index++;
        }
    }
    else
    {
        // Einfaches Key-Value-Paar hinzufügen
        dataGridView1.Rows.Add(prefix.TrimEnd('.'), token.ToString());
    }
}

So kannst du das JSON direkt an die Funktion übergeben, die die Struktur automatisch abflacht..

JObject data = JObject.Parse(output.Trim()); 
dataGridView1.Rows.Clear();
FlattenJson(data, "");

Aus einem Array wie

"InstalledSoftware": [
    { "Name": "Chrome", "Version": "120.1" },
    { "Name": "Notepad++", "Version": "8.5" }
]

würde dadurch

InstalledSoftware[0].Name Chrome
InstalledSoftware[0].Version 120.1
InstalledSoftware[1].Name Notepad++
InstalledSoftware[1].Version 8.5
von (1.3k Punkte)