DWD Json auslesen Fehlermeldung

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Drachie.

    DWD Json auslesen Fehlermeldung

    Moin zusammen,

    ich versuche derzeit die unwetterwarnungen vom DWD über deren JSON auzulesen. Der Server der DWD liefert auch die daten zurück nur bekomme ich jedesmal bei der Dezerilation folgende Fehlermeldung:

    Quellcode

    1. ​unexpected character encounteres while parsion value: w. path '', line 0, position 0
    leider finde ich den fehler nicht...

    anbei der lauffähige code zu dem bereich wo der JSON abgerufen wird. eingesetzt wird newtonsoft.json sowie option Strict on

    VB.NET-Quellcode

    1. Try
    2. Dim url As String
    3. url = "https://www.dwd.de/DWD/warnungen/warnapp/json/warnings.json"
    4. Dim postAdress = New Uri(url)
    5. Dim request As HttpWebRequest = DirectCast(WebRequest.Create(postAdress), HttpWebRequest)
    6. request.Method = "GET"
    7. request.ContentType = "application/json"
    8. Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
    9. If (response.StatusCode = HttpStatusCode.OK) Then
    10. Using reader As New StreamReader(response.GetResponseStream())
    11. Dim rec As String
    12. rec = reader.ReadToEnd()
    13. Dim meld As jsonrec = JsonConvert.DeserializeObject(Of jsonrec)(rec)
    14. If meld.regionName = My.Resources.dwdzelle Then
    15. MsgBox(meld.headline)
    16. wetter1.AppendText("Warnstufe: " & meld.level & Environment.NewLine)
    17. wetter1.AppendText(meld.headline & Environment.NewLine)
    18. wetter1.AppendText(meld.description & Environment.NewLine)
    19. wetter1.AppendText(meld.instruction)
    20. End If
    21. End Using
    22. End If
    23. Catch ex As Exception
    24. MsgBox(ex.Message)
    25. End Try​


    VB.NET-Quellcode

    1. ​Public Class jsonrec
    2. Public Property regionName As String
    3. Public Property type As Integer
    4. Public Property state As String
    5. Public Property headline As String
    6. Public Property altitudeStart As Object
    7. Public Property altitudeEnd As Object
    8. Public Property description As String
    9. Public Property level As Integer
    10. Public Property stateShort As String
    11. Public Property instruction As String
    12. End Class


    vielleicht findet einer von euch den Fehler??
    Heyho,

    mache das Try-Catch weg warum Fehler in der MsgBox (VB6 Kram bitte auch weg machen) ausgeben ?
    Die IDE kann das viel besser und du kannst dir ordentlich die Inhalte der Variablen angucken in der IDE.

    //EDIT/ Aber das ist wieder was , was wir dir auch schon 30x geschrieben haben das solche Try-Catch dinger sinnlos sind.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    *Vollzitat entfernt*

    hmm... also ernn ich rec.Replace("warnWetter.loadWarnings(", "") und rec.Replace(");", "") hinzufüge, ist zwar die eine Fehlermeldung weg, dafür aber eine neue: objektverweis wurde nicht auf eine Objektinstanz festgelegt.....

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    @Drachie Poste mal den Link der JSon-Quelle.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany

    Drachie schrieb:

    url = "https://www.dwd.de/DWD/warnungen/warnapp/json/warnings.json"


    @Drachie Schau dir mal im Browser direkt an was da so an Daten zurück kommt. Da kommst du mit deiner bisherigen Klasse nicht weiter. Sofern beim DWD also nicht gerade der Server die grätsche macht und Müll ausspuckt (da der JSON vom Server nicht direkt valide ist, wäre das vielleicht sogar möglich), brauchst du ein anderes Datenmodell. Jag den JSON ohne den Funktionsaufruf mal durch nen C# Klassengenerator für JSON, und dass dann durch nen C#-VB.NET Konverter.

    RodFromGermany schrieb:

    @Drachie Poste mal den Link der JSon-Quelle.

    dwd.de/DWD/warnungen/warnapp/json/warnings.json

    xChRoNiKx schrieb:

    Try-Catch weg gemacht und geschaut in welcher Zeile der Fehler kommt? (merkst du wie Try-Catch dich da behindert?)

    habe ich:

    VB.NET-Quellcode

    1. Dim meld As jsonrec = JsonConvert.DeserializeObject(Of jsonrec)(rec)


    gibt den fehler zurück
    Laut dem JSON kommen da theoretisch mehrere Objekte von deiner jsonrec Klasse zurück und du speicherst einfach alles in einer nicht Instanz.
    Spoiler anzeigen

    Quellcode

    1. ​warnWetter.loadWarnings({
    2. "time": 1553615600000,
    3. "warnings": {
    4. "106631000": [
    5. {
    6. "regionName": "Kreis Fulda",
    7. "start": 1553630400000,
    8. "end": 1553673600000,
    9. "type": 5,
    10. "state": "Hessen",
    11. "headline": "Amtliche WARNUNG vor FROST",
    12. "altitudeStart": null,
    13. "altitudeEnd": null,
    14. "description": "Es tritt leichter Frost um -1 °C auf.",
    15. "level": 2,
    16. "stateShort": "HE",
    17. "instruction": "",
    18. "event": "FROST"
    19. }
    20. ],
    21. "108116000": [
    22. {
    23. "regionName": "Kreis Esslingen",
    24. "start": 1553619600000,
    25. "end": 1553673600000,
    26. "type": 5,
    27. "state": "Baden-Württemberg",
    28. "headline": "Amtliche WARNUNG vor FROST",
    29. "altitudeStart": null,
    30. "altitudeEnd": null,
    31. "description": "Es tritt leichter Frost zwischen 0 °C und -3 °C auf.",
    32. "level": 2,
    33. "stateShort": "BW",
    34. "instruction": "",
    35. "event": "FROST"
    36. }
    37. ],
    38. "108117000": [
    39. {
    40. "regionName": "Kreis Göppingen",
    41. "start": 1553619600000,
    42. "end": 1553673600000,
    43. "type": 5,
    44. "state": "Baden-Württemberg",
    45. "headline": "Amtliche WARNUNG vor FROST",
    46. "altitudeStart": null,
    47. "altitudeEnd": null,
    48. "description": "Es tritt leichter Frost zwischen 0 °C und -3 °C auf.",
    49. "level": 2,
    50. "stateShort": "BW",
    51. "instruction": "",
    52. "event": "FROST"
    53. }
    54. ],
    Oder sehe ich das falsch? Eigentlich nicht das sind mehrere von deinen Objekten.

    Und dann musst du natürlich auch eine neue Instanz von jsonrec erstellen also Dim xy as Jsonrec = new jsonrec
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    Das Problem an der sache ist, das die DWD-wetterzellen nummer nicht als benennung für die public class genommen werden können. dan währe das ganze wesendlich einfacher....
    Kann es sein, dass die Seite selbst die Fehlerursache ist?

    =====
    warnWetter.loadWarnings( und ) weg und gut.

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „RodFromGermany“ ()

    hmm.. in Postman bekomme ich keine fehlermeldung bei dem aufruf



    und eigendlich würde es auch nich Public Class jsonrec heissen sondern Public Class <DWD-weathercellnumber>

    so.. ich habe den Code um folgendes jetzt ergänzt in der hoffung das die abfrage jetzt läuft:

    VB.NET-Quellcode

    1. rec = reader.ReadToEnd()
    2. rec.Replace("warnWetter.loadWarnings(", "")
    3. rec.Replace(");", "")


    was leider nicht der fall ist....


    und dafür einer eine idee:

    VB.NET-Quellcode

    1. Public Class 101001000
    2. Public Property regionName As String
    3. Public Property start As Long
    4. Public Property end As Long
    5. Public Property type As Integer
    6. Public Property state As String
    7. Public Property headline As String
    8. Public Property altitudeStart As Object
    9. Public Property altitudeEnd As Object
    10. Public Property description As String
    11. Public Property level As Integer
    12. Public Property stateShort As String
    13. Public Property instruction As String
    14. Public Property event As String
    15. End Class
    16. Public Class Warnings
    17. Public Property 101001000 As 101001000()
    18. End Class
    19. Public Class VorabInformation
    20. End Class
    21. Public Class RootObject
    22. Public Property time As Long
    23. Public Property warnings As Warnings
    24. Public Property vorabInformation As VorabInformation
    25. Public Property copyright As String
    26. End Class


    das ist der Public Class block um das ganze nach der Wetterzelle auzulesen, welches so ja nicht nuntzbar ist....

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Drachie“ ()