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 (0 Punkte)  

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 (1.1k 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();