JSON Datei auslesen

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Takafusa.

    JSON Datei auslesen

    Hallo zusammen

    ich habe eine JSON Datei mit folgender Struktur: Ich möchte gerne die Inhalte auslesen.

    {
    "vorhanden": [
    [
    {
    "key": "Zaun,Stahl",
    "einheit": "m²",
    "iwmin": 0,
    "iwmax": 27,
    "iwstep": 1,
    "grundpreis": 27,
    "summentyp": 1,
    "level2i": 0,
    "level3i": 0,
    "menge": 1,
    "minderung": "32",
    "kriterien": "",
    "level1i": 0
    },
    {
    "key": "Türe",
    "einheit": "",
    "iwmin": 0,
    "iwmax": 0,
    "iwstep": 1,
    "grundpreis": 0,
    "summentyp": 0,
    "level2i": 1,
    "level3i": 0,
    "menge": 1,
    "minderung": "15",
    "kriterien": ""
    }
    ],
    [
    {
    "key": "Apfel",
    "einheit": "Stück",
    "iwmin": 30,
    "iwmax": 67,
    "iwstep": 1,
    "grundpreis": 67,
    "summentyp": 2,
    "level2i": 0,
    "level3i": 0,
    "menge": 2,
    "minderung": "15",
    "kriterien": "",
    "level1i": 1
    },
    {
    "key": "Kirsche",
    "einheit": "Stück",
    "iwmin": 25,
    "iwmax": 60,
    "iwstep": 1,
    "grundpreis": 60,
    "summentyp": 2,
    "level2i": 0,
    "level3i": 6,
    "menge": 1,
    "minderung": 0,
    "kriterien": "",
    "level1i": 1
    }
    ],
    [
    {
    "key": "Goldregen",
    "einheit": "Stück",
    "iwmin": 10,
    "iwmax": 24,
    "iwstep": 1,
    "grundpreis": 24,
    "summentyp": 3,
    "level2i": 4,
    "level3i": 10,
    "menge": 2,
    "minderung": 0,
    "kriterien": "",
    "level1i": 2
    }
    ]
    ]
    }

    Hier mein Ansatz:
    Dim newsResponse As JObject = JObject.Parse(Mystring)
    Dim results = newsResponse("vorhanden")

    For Each result As JToken In results
    Debug.WriteLine(result.ToString())
    Next

    Doch leider komme ich nicht weiter. Wer kann helfen?

    Danke und Grüße Chris
    Hatten wir gerade erst:
    JSON Elemente auslesen

    Dort siehst du wo du die Klassen dafür erstellen lassen kannst(ein Link), zwar nur C#, das kannste aber auch mit Online Konvertern zu VB übersetzen, ein Anwendungsbeispiel findest du dort auch. Brauchst nur ein Nuget Päckchen zusätzlich dem Projekt hinzufügen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Takafusa“ ()

    Takafusa schrieb:

    zwar nur C#, das kannste aber auch mit Online Konvertern zu VB übersetzen
    Eine Methode, die mit VB.Net und C# funktioniert, hat Visual Studio an Bord:
    JSON in die Zwischenablage kopieren.
    Edit .. Paste Special .. Paste JSON As Classses
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    @petaod

    Genial!
    Im Studio auf deustch: Bearbeiten->Inhalte Einfügen->Json als klassen einfügen.

    Aber scheint noch nicht ganz ausgereift. Aber nützlich allemal.


    Auch ist das via der erwähnten Website momentan noch besser, weil direkt passend für's Newtonsoft Päckchen Subs hinzugefügt werden, so das man sofort und ohne weiteres Deserialisieren kann.

    Aus dem Thread den ich verlinkt hab
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Partial Public Class Highlights
    2. Public Shared Function FromJson(ByVal json As String) As Highlights
    3. Return JsonConvert.DeserializeObject(Of Highlights)(json, Settings)
    4. End Function
    5. End Class
    6. Public Module Serialize
    7. <Extension()>
    8. Public Function ToJson(ByVal self As Highlights) As String
    9. Return JsonConvert.SerializeObject(self, Settings)
    10. End Function
    11. End Module
    12. Friend Module Converter
    13. Public ReadOnly Settings As New JsonSerializerSettings With {
    14. .MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
    15. .DateParseHandling = DateParseHandling.None
    16. }
    17. End Module

    Nö, das sollte so passen, auch wenn es eventuell falsch ist.
    In dem JSON das du gepostet hast, ist vorhanden ein Array und darin enthalten ist wieder ein Array: ... "vorhanden": [[ ... ]] ...
    Nööö @slice VS generiert Code der Fehlerhaft ist.

    VS macht:

    VB.NET-Quellcode

    1. Public Class Rootobject
    2. Public Property vorhanden()() As Vorhanden
    3. End Class

    Sollte aber so sein:

    VB.NET-Quellcode

    1. Public Class Rootobject
    2. Public Property vorhanden As Vorhanden()()
    3. End Class


    So wie VS den Code generiert, kommt direkt eine Fehlermeldung. Die Klammern sind an der falschen Stelle, in C# macht das Studio es richtig, aber net in VB
    Fehler BC30205 end of-Anweisung erwartet.

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