Json Auslesen?

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von FantaZimt.

    Json Auslesen?

    Ich hab ein kleines Problem.. Ich habe eine Json Datei mit vielen Einträgen. Ausschnitt:


    JSON-Quellcode

    1. ​{
    2. "uuid": "******************************************",
    3. "name": "****************",
    4. "created": "2016-08-03 11:31:32 +0100",
    5. "source": "Server",
    6. "expires": "forever",
    7. "reason": "fliegen ohne berechtigung"
    8. },
    9. {
    10. "uuid": "******************************************",
    11. "name": "****************",
    12. "created": "2016-08-02 23:11:21 +0100",
    13. "source": "Server",
    14. "expires": "forever",
    15. "reason": "Banned by an operator."
    16. },
    17. {
    18. "uuid": "******************************************",
    19. "name": "****************",
    20. "created": "2016-08-02 08:11:02 +0100",
    21. "source": "FantaZimt",
    22. "expires": "forever",
    23. "reason": "cheating"
    24. },
    25. {
    26. "uuid": "******************************************",
    27. "name": "****************",
    28. "created": "2016-08-01 18:09:57 +0100",
    29. "source": "Server",
    30. "expires": "forever",
    31. "reason": "cheating"
    32. },



    Ich würde jetzt gerne eine Listbox damit befüllen... Und zwar so: "Name", "Reason", "Expires", "Source"

    Nur weiß ich leider nicht wie ich das umsetzen kann. :?:
    Wäre jemand so lieb und könnte mir ein bisschen helfen? :love:
    @FantaZimt Lade Dir eine JSon-Bibliothek (es gibt mehrere) runter und parse Deinen String.
    Gugst Du z.B. hier.
    Nimm die NewtonSoft-Lib von @Trade.
    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 1 mal editiert, zuletzt von „RodFromGermany“ ()

    @RodFromGermany Warum CodePlex? Da geht so gut wie nichts mehr. ;)
    newtonsoft.com/json

    Aber jo, nimm Dir die Library, die ist schon echt klasse. Dann bastelst Du Dir einen Typen, der die Properties enthält und damit das Ganze repräsentiert und (de)serialisierst eine Liste von dem Typen mit der Bibliothek. Dann nur noch entsprechend anzeigen und fertig.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    @Trade Jou.
    Ich hab mich im Link vergriffen. :D
    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!
    Du kannst dir entweder über json2csharp oder in VS unter Bearbeiten -> Inhalt einfügen -> JSON als Klasse einfügen aus einem vorhandenen JSON dir C#-Klassen erzeugen lassen. Dann brauchst du nur noch das JSON in deine Klassen deserialisieren. Anschließend entsprechend an die ListBox binden.

    Wenn du das ganze mit VB und Windows Forms machst, dann ist der beste Weg um die Daten auf die Oberfläche zu bekommen der, über eine BindungSource zu gehen.
    Solltest du das ganze in WPF machen wollen, bietet sich die Eigenschaft ItemSource des Controls ListBox an. Da ItemSource ein IEnumerable ist und die ListBox eine Listen anzeigendes Control ist, eignet sich eine IList(Of T) oder eine ObservableCollection(Of T). Hier ein Link, wie du Daten mithilfe einer ObservableCollection an deine Oberfläche bindest.

    Zu deiner Grundfrage, wie du das machen kannst, kann ich dir nur das obere geben, da ich nicht weiß, was noch in deinem JSON enthalten ist.
    Sollte das, was da oben steht (also dieser Ausschnitt), ein Element eines Array sein, kannst du ganz einfach über die JSON Bibliothek Newtonsoft.JSON das Json deseralisieren.
    Wie gesagt: Wenn du eine ListBox befüllen willst, wirst du einen Listentypen verwenden müssen. Für Windows Forms reicht eine einfache IList(Of T) oder eine List(Of T), für WPF solltest du ObservableCollection(Of T) verwenden, da es dich notifiziert (=benachrichtigt), ob sich die Liste oder ein Element der Liste geändert hat.

    Ich hoff meine Ausführung reicht dir, wenn nicht, helfe ich dir gerne.
    Lg Radinator

    Edit:

    RodFromGermany schrieb:

    NewtonSoft-Lib von @Trade.
    ?

    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Gibt genug im Netz und sogar auf der verlinkten Seite.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Ich muss den alten Thread doch nochmal ausgraben..

    Und zwar hab ich jetzt das hier gebastelt..:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. Dim JsonString As String = File.ReadAllText("Datei.json")
    3. Dim Json = JsonConvert.DeserializeObject(Of List(Of JsonMC))(JsonString)
    4. For Each i In Json
    5. ListBox1.Items.Add(i)
    6. Next
    7. End Sub


    VB.NET-Quellcode

    1. ​Public Class JsonMC
    2. Public Property uuid As String
    3. Public Property name As String
    4. Public Property created As String
    5. Public Property source As String
    6. Public Property expires As String
    7. Public Property reason As String
    8. End Class


    Allerdings bekomme ich in der Listbox nur "WindowsApp1.JsonMC" angezeigt.. und eben nicht das, was in der .Json steht. Nun weiß ich wirklich nicht mehr weiter..
    Ja natürlich. Du packst ja auch nur diese Objekte in die ListBox.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Trade will vmt. sagen, machs so:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. Dim JsonString As String = File.ReadAllText("Datei.json")
    3. Dim Json = JsonConvert.DeserializeObject(Of List(Of JsonMC))(JsonString)
    4. ListBox1.Datamember = "name"
    5. ListBox1.dataSource = Json
    6. End Sub