Daten speichern und laden mit JSON

    • VB.NET

    Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von zn-gong.

      Daten speichern und laden mit JSON

      Hallo,

      ich stelle euch heute JavaScript Object Notation, kurz JSON vor und
      erkläre euch, wie ihr Daten in JSON speichert und auch wieder laden
      könnt.





      Was ist JSON?


      JavaScript Object Notation, kurz JSON ist ein kompaktes Datenformat,
      dass für Mensch und Maschine lesbar ist. Jede gültige JSON-Datei muss
      dem JavaScript-Schema entsprechen.

      Es gibt für jede hohe Programmiersprache einen JSON-Parser und manche
      Entwickler programmieren für manche sogar Bibiotheken.

      Wir werden uns hier den Visual Basic-Parser für JSON anschauen.



      Wie wird der JSON-Parser importiert?


      Der JSON-Parser für Visual Basic liegt im Namespace
      System.Runtime.Serialization.

      Man muss erst auf Projekt -> Verweis hinzufügen gehen
      und nach System.Runtime.Serialization suchen, um den
      Namespace zu importieren.

      Die Klasse, die den JSON-Parser implementiert, heißt:
      System.Runtime.Serialization.Json

      und daraus folgt, dass man wie folgt importiert:

      VB.NET-Quellcode

      1. Imports System.Runtime.Serialization.Json




      Eine eigene Klasse erstellen


      Wenn man Daten mit JSON speichern oder laden will,
      dann muss man eine eigene Klasse erstellen, z.B die
      Klasse Benutzer.

      Diese muss den Namespace System.Runtime.Serialization
      importiert haben und muss das Attribut DataContract besitzen,
      dann schaut das Grundgerüst schon mal so aus:

      VB.NET-Quellcode

      1. Imports System.Runtime.Serialization
      2. <DataContract()> _
      3. Public Class Benutzer
      4. End Class


      Wenn das Grundgerüst fertig ist, müssen die
      Variablen deklariert werden:

      VB.NET-Quellcode

      1. Private _benutzername As String 'Benutzername
      2. Private _beitraege As Integer 'Anzahl der Beiträge
      3. Private _signatur As String 'Signatur


      Diese kann der Parser nicht sehen, da sie als Private
      deklariert wurden.

      Darum müssen noch die entsprechenden Propertys
      gemacht werden:

      VB.NET-Quellcode

      1. <DataMember()> _
      2. Public Property Benutzername As String
      3. Get
      4. Return _benutzername 'Benutzername wird zurückgegeben
      5. End Get
      6. Set(ByVal value As String)
      7. _benutzername = value 'Variable wird verändert
      8. End Set
      9. End Property
      10. <DataMember()> _
      11. Public Property Beiträge As Integer
      12. Get
      13. Return _beitraege 'Anzahl der Beiträge werden zurückgegeben
      14. End Get
      15. Set(ByVal value As String)
      16. _beitraege = value 'Variable wird verändert
      17. End Set
      18. End Property
      19. <DataMember()> _
      20. Public Property Signatur As String
      21. Get
      22. Return _signatur 'Signatur wird zurückgegeben
      23. End Get
      24. Set(ByVal value As String)
      25. _signatur = value 'Variable wird verändert
      26. End Set
      27. End Property


      Wer nicht weiß, was es sich mit dem <DataMember()> _ auf sich
      hat, erkläre ich euch jetzt:

      <DataMember()> _ und sowohl auch <DataContract()> _
      sind beides Attribute, die dem Parser verständlich machen, dass wenn eine
      Klasse mit DataContract spezifiziert wird, dass das ein Objekt ist, dass er
      verarbeiten soll. Das gleiche ist, wenn man eine Property o. ä. als DataMember
      spezifiziert, dann weiß der Parser, dass es sich um einen Member der Klasse
      Benutzer handelt.



      Wie speichert und ladet man die Daten?


      Das ermöglicht uns der DataContractJsonSerializer, der
      uns dann unsere List(Of Benutzer) ins JSON-Format speichert
      und auch aus der JSON-Datei die List erstellen kann.

      Wir werden jetzt in einer anderen Klasse, in meinem Fall frmJson, eine Sub
      Speichern und eine Funktion Laden erstellen und den Namespaces
      System.Runtime.Serialization.Json und System.IO importieren.

      Bei der Sub Speichern wird ein FileStream erstellt und mit dem
      JsonSerializer von der List(Of Benutzer) ins JSON-Format umgewandelt
      und gespeichert.

      VB.NET-Quellcode

      1. Private Sub Speichern(ByVal list As List(Of Benutzer))
      2. Using fs As New FileStream("Benutzer.json", FileMode.OpenOrCreate, FileAccess.Write)
      3. Dim jsonparser As New DataContractJsonSerializer(GetType(Benutzer))
      4. jsonparser.WriteObject(fs, list)
      5. End Using
      6. End Sub


      Bei der Funktion Laden wird auch ein FileStream erstellt und mit dem
      JSON-Parser ausgelesen und in den Typ List(Of Benutzer) umgewandelt.

      VB.NET-Quellcode

      1. Public Function Laden() As List(Of Benutzer)
      2. Dim list As New List(Of Benutzer)
      3. Using fs As New FileStream("Benutzer.json", FileMode.OpenOrCreate, FileAccess.Write)
      4. Dim jsonparser As New DataContractJsonSerializer(GetType(Benutzer))
      5. list = CType(jsonparser.ReadObject(fs), List(Of Benutzer))
      6. End Using
      7. Return list
      8. End Function




      Benutzung der Sub und Funktion


      Die Sub Speichern kann man so benutzen:

      VB.NET-Quellcode

      1. Dim list As New List(Of Benutzer)
      2. list.Add(New Benutzer With {.Beiträge = 100, .Benutzername = "User1", .Signatur = "MFG User1."})
      3. list.Add(New Benutzer With {.Beiträge = 200, .Benutzername = "User2", .Signatur = "MFG User2."})
      4. list.Add(New Benutzer With {.Beiträge = 300, .Benutzername = "User3", .Signatur = "MFG User3."})
      5. Speichern(list)


      Als erstes erstellt man eine List(Of Benutzer) und füllt diese mit Inhalt und
      ruft die Sub Speichern mit 'list' als Parameter auf.




      Die Funktion Laden() kann man wie folgt benutzen:

      VB.NET-Quellcode

      1. Dim list As List(Of Benutzer)
      2. list = Laden()


      Man erstellt eine List(Of Benutzer) und der Inhalt
      der List ist dann der Inhalt der JSON-Datei.





      Schlusswort:


      Ich hoffe, es hat euch gefallen und
      freue mich, wenn jemand etwas postet,
      wenn etwas nicht funktioniert.

      Freue mich auf Antworten.

      MFG

      Alex-Digital :D
      ~ Alex-Digital :D

      if(!Internet.VBP.Get<User>("Alex-Digital").IsOnline) this.Close(); :D

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Alex-Digital“ ()

      Alex-Digital schrieb:

      Jede gültige JSON-Datei muss
      aus gültigem JavaScript sein.

      Alex-Digital schrieb:

      Es gibt für jede Programmiersprache einen JSON-Parser.
      Nö. a) Kann ich eine JSON genauso gut in nem Texteditor schreiben. Wieso sollte ich dafür Javascript brauchen? Oder was macht die PHP-Funktion: json_encode? b) Es gibt bei weitem nicht für jede Sprache nen JSON-Parser.

      Ansonsten gute Idee. Kennen recht wenige, da viele XML fixiert sind. Gibt jedoch bessere und einfacher handzuhabende Libs(siehe google, codeplex,...).


      Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
      Hallo,

      @thefiloe:

      Ergänzung:

      Jede gültige JSON-Datei muss dem JavaScript-Syntax
      entsprechen.




      Es gibt für jede höhere Programmiersprachen einen
      entsprechenden Parser und manche Entwickler bieten
      für andere sogar Bibliotheken an.

      Und danke für deine Antwort!

      MFG

      Alex-Digital :D
      ~ Alex-Digital :D

      if(!Internet.VBP.Get<User>("Alex-Digital").IsOnline) this.Close(); :D
      Warum nicht einfach datamember()> Public Property Irgendwas as object, seid (ich glaube 2010) muss man keine Variable mehr erstellen sondern kann einfach direkt die eigenschaften Definieren.

      LG, Herbrich