Problem bei JSON über Downloadstring

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von EaranMaleasi.

    Problem bei JSON über Downloadstring

    Hallo zusammen,

    Ich hätte ein kleines Problem, und zwar lasse ich mir Daten über ein PHP Script von einer Datenbank ausgeben. Das ganze im JSON Format.
    Nun möchte Ich die Daten in mein VB Projekt "einlesen" ICh hatte bereits google bemüht und bin auf diesen Post gestoßen:
    Zugriff aus JSON via API
    Dies hatte Ich getestet leider Bekomme ICh immer eine Fehlermedlung "Newtonsoft.Json.JsonReaderException: "Error reading JObject from JsonReader. Current JsonReader item is not an object: StartArray. Path '', line 1, position 2." bei dieser Zeile:

    VB.NET-Quellcode

    1. Dim j As JObject = JObject.Parse(data)

    Die Ausgabe der Abfrage ist: [{"Serial":"2018141201P"},{"Serial":"2019230101"},{"Serial":"2019020203"},{"Serial":"2019888888"},{"Serial":"2020290207"},{"Serial":"2020160401"},{"Serial":"2020030901"}]

    hier noch der geänderte QuellCode:

    VB.NET-Quellcode

    1. Imports Newtonsoft.Json
    2. Imports Newtonsoft.Json.Linq
    3. Imports System.IO
    4. Imports System.Net
    5. Public Class Form1
    6. Private Async Function GetData() As Task
    7. Using wC As New WebClient() With {.Proxy = Nothing}
    8. Dim data As String = String.Empty
    9. Try
    10. data = Await wC.DownloadStringTaskAsync("https://www.meine-url.de/abfrage.php?id=959835898")
    11. Catch ex As Exception
    12. Return
    13. End Try
    14. If data <> String.Empty Then
    15. Dim j As JObject = JObject.Parse(data)
    16. For i = 0 To j.SelectToken("results").Count() - 1
    17. MessageBox.Show(j.SelectToken("results")(i).SelectToken("Serial").ToString())
    18. Next
    19. End If
    20. End Using
    21. End Function
    22. Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    23. Await GetData()
    24. End Sub
    25. End Class

    Hättet Ihr da zufällig eine Lösung wie Ich an die einzelnen Werte Komme ? Bzw. Wo mein Fehler liegt ?
    Ich sehe hier folgendes Problem:
    Die Rückgabe der Webseite ist ein reines "Array". Es ist kein eigenständiges JSON-Objekt.
    Der Code hingegen versucht jedoch ein Objekt zu deserialisieren, das wohl mehrere Properties, darunter "result" hat, das nicht einmal in deiner Rückgabe vorkommt.

    Eins von beiden muss sich nun anpassen. Entweder gibt dir die Rückgabe ein vollständiges Objekt, oder aber du benutzt JArray.Parse() und arbeitest damit weiter.