lima-city: Webhosting, Domains und Cloud
1 Pluspunkt 0 Minuspunkte

Ich rufe eine JSON Datei mit der HttpClient Klasse aus System.Net ab. Dazu habe ich das Paket Newtonsoft.JSON installiert aber ich komme nicht ganz klar mit dem einlesen der Ergebnisse. Das JSON hat diese Struktur:

{
  "resultsPerPage": 1,
  "startIndex": 0,
  "totalResults": 1,
  "format": "NVD_CVE",
  "version": "2.0",
  "timestamp": "2025-03-13T04:25:47.236",
  "vulnerabilities": [
    {
      "cve": {
        "id": "CVE-2024-35177",
        "sourceIdentifier": "security-advisories@github.com",
        "published": "2025-02-03T22:15:27.600",
        "lastModified": "2025-02-03T22:15:27.600",
        "vulnStatus": "Awaiting Analysis",
        "cveTags": [],
        "descriptions": [
          {
            "lang": "en",
            "value": "English description"
          }
        ]
      }
    }
  ]
}

Wie kann ich auf die einzelnen Felder der Objekte zugreifen und diese ausgeben?

using (HttpClient client = new HttpClient())
{
    try
    {
        
        string json = await client.GetStringAsync(url);
        JObject data = JObject.Parse(json.Trim());
        //Console.WriteLine(data.ToString());

        int totalResults = data["totalResults"]?.Value<int>() ?? 0;
        Console.ForegroundColor = ConsoleColor.Green;
        if (totalResults > 0) { Console.ForegroundColor = ConsoleColor.Red; }
        Console.Write("\tFür dieses Paket sind ");
        Console.Write(totalResults);
        Console.WriteLine(" Schwachstellen bekannt.");
        Console.ResetColor();


        var vulnerabilities = data["vulnerabilities"] as JArray;
        if (vulnerabilities != null && vulnerabilities.Count > 0)
        {
            foreach(JObject vulnerability in vulnerabilities) {
                Console.WriteLine($"\n{vulnerability["id"]}");
            }
        }

    }
    catch(Exception ex) { }
}
von (1 Punkt)  

1 Antwort

1 Pluspunkt 0 Minuspunkte

Hier ist ein Beispiel um "id" und das erste Objekt aus "descriptions" auszugeben.

if (vulnerabilities != null && vulnerabilities.Count > 0)
{

    for(int i = 0; i < vulnerabilities.Count; i++) 
    {
        
        string id = vulnerabilities[i].SelectToken("cve").SelectToken("id").ToString();
        Console.WriteLine($"{id}");

        var descriptionArray = vulnerabilities[i].SelectToken("cve").SelectToken("descriptions") as JArray;
        if (descriptionArray != null && descriptionArray.Count > 0)
        {
            string firstDescription = descriptionArray.First["value"]?.ToString();
            Console.WriteLine($"{firstDescription}");
        }
    }
}
von (629 Punkte)  
Danke das klappt und wie kann ich nur die Description ausgeben die als "lang" den Wert "en" hat?
var englishDescription = descriptionArray.FirstOrDefault(desc => desc["lang"]?.ToString() == "en")?["value"]?.ToString();
Diese Community basiert auf dem Prinzip der Selbstregulierung. Beiträge werden von Nutzern erstellt, bewertet und verbessert – ganz ohne zentrale Moderation.

Wer hilfreiche Fragen stellt oder gute Antworten gibt, sammelt Punkte. Mit steigender Punktzahl erhalten Mitglieder automatisch mehr Rechte, zum Beispiel

  • Kommentare verfassen
  • Fragen und Antworten bewerten
  • Themen von Fragen bearbeiten
  • Fragen, Antworten und Kommentare bearbeiten
  • Inhalte ausblenden

So entsteht eine Plattform, auf der sich Qualität durchsetzt – getragen von einer engagierten Gemeinschaft.

2.3k Fragen

2.8k Antworten

266 Kommentare

14 Nutzer