Einzelne Values aus einer JSON Datei lesen und zurückschreiben

  • VB.NET
  • .NET 5–6

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Einzelne Values aus einer JSON Datei lesen und zurückschreiben

    Hallo zusammen,

    bin gerade etwas am verzweifeln.

    Ich muss aus einer JSON Datei einzelne Werte auslesen und ggf. diese ändern und wieder in die JSON Datei zurückschreiben. Leider komme ich bei JSON nicht weiter. Die Datei war bis zum Update des Tools noch eine XML wo ich es ohne Probleme ändern konnte. Aber jetzt mit JSON und vb.Net komme ich nicht mehr weiter. Vielleicht kann mir jemand helfen.

    Die JSON Datei ich wie folgt:

    Quellcode

    1. {"ValidConfig":true,"checkconfig":false,"UserTypes":["TESTER","SI","EXPERT"],"UserTypeSelected":"TESTER","ActualTestEnvironment":"Test","NoOfRetries":"4","DurationOfRetrials":"10","ELevel":"E000.1","ProvingCategory":"TR21","TestFocus":"","Destination":"","StartDate":"2023-03-29","EndDate":"2023-03-29","Release":"TR23/23B","ValidConfigFile":true,"Market":"ECE","Event":"ERPROBUNG","Platform":"GEN","SevenZipPath":"C:\\Program Files\\7-Zip\\","TestEventPath":"C:\\Testdrive\\030_Daten_für_RD","AutoImport":null,"VehicleAndCategoryList":"C:\\Testdrive\\test.xls","TopTenReq":false,"AutoDateTimeCheck":false,"AutoBPvaluesCheck":false,"AutoValidCheck":false,"Vehicle":false,"Attachment":false,"EventConfig":false,"AllFields":true,"PROD":true,"CopyTrigger":false,"TesterName":null,"TestGroup":null,"VerificationbyTestGroup":null,"OpenDefectDirectly":false,"UseManualProxy":false,"ManualProxy":null,"HideCurrentVersionDetailsOnAppStartUp":true}


    Ich möchte jetzt der Wert für "TestEventPath" und "ELevel" ändern. Die Werte sollen erst aus der JSON Datei eingelesen werden und in eine TextBox geschrieben werden. Die TextBox wird dann geändert und soll dann in die JSON Datei zurückgeschrieben werden. Alle andere Werte sollen unberührt sein.

    Vielleicht kann mir jemand helfen.

    Danke

    Thema verschoben; Das Thema wird automatisch dort erstellt, wo man sich befindet, wenn man auf [✱ Neues Thema] klickt. ~VaporiZed

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

    Willkommen im Forum.

    Hast Du eine zugrundeliegende Datenklasse, die diese JSON-Daten aufnehmen kann? Es gibt zwar noch das generische JObject aus dem Newtonsoftpaket, aber je typisierter, desto einfacher der Zugriff.
    Verwendest Du überhaupt Newtonsoft für die JSON-Verarbeitung oder das Microsoft-JSON-Paket?
    Bist Du mit .NET-Framework-Unterbau unterwegs oder mit .NET?
    Wie hattest Du das Problem zuvor mit XML-Daten gelöst?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hallo VaporiZed,

    hab es mit dem Newtonsoftpaket schon versucht, aber komme nicht weiter. Würde eher das Microsoft-JSON-Paket verwenden.
    Bin mit .NET unterwegs.

    Im XML Format habe ich es wie folgt gelöst:

    Quellcode

    1. Dim xml_Doc As XmlDocument ' XML-Dokument (Datei)
    2. xml_Doc = New XmlDocument() ' Instanz bilden ...
    3. xml_Doc.Load(Form_Settings.txt_tds.Text & "\Configurations.xml") ' XML-Datei laden
    4. xml_Doc.SelectSingleNode("/TdsConfigsData/ELevel").InnerText = Form_TDS.txt_estand.Text
    5. xml_Doc.SelectSingleNode("/TdsConfigsData/Release").InnerText = Form_TDS.txt_telematic_release.Text
    6. xml_Doc.SelectSingleNode("/TdsConfigsData/Market").InnerText = Form_TDS.combo_market.Text
    7. xml_Doc.SelectSingleNode("/TdsConfigsData/Platform").InnerText = Form_TDS.combo_ntg.Text
    8. xml_Doc.Save(Form_Settings.txt_tds.Text & "\Configurations.xml")


    Bestimmt auch nicht schön, aber es ging wie erhofft. Jetzt hat sich eben die XML in ein JSON geändert und ich stehe da wie der Ochs vorm Berg.


    Das lesen eines Wertes habe ich wie folgt gemacht (Mit Newtonsoft):

    Quellcode

    1. ​ Dim json As String = File.ReadAllText("C:\Temp\Configurations.json")
    2. Dim parsejson As JObject = JObject.Parse(json)
    3. Dim TestEventPath = parsejson.SelectToken("TestEventPath").ToString()
    4. TextBox1.Text = TestEventPath
    5. End Sub


    Das geht auch, aber wie schreibe ich jetzt den geänderten Wert aus der Textbox in die JSON Datei zurück?

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

    Bist doch schon ganz weit.
    Zwar nicht schön, klappt aber: parsejson("TestEventPath") = TextBox1.Text
    Damit ist das JObject mit neuem Wert bestückt und kann zurück in die Datei.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Und genau hier habe ich jetzt meine Schwierigkeit. Wie bekomme ich das das "parsejson" wieder in die JSON Datei geschrieben.... Steh echt auf dem Schlauch..

    Ok hab es glaub, zwar echt nicht schön, aber naja, Zweckmäßig...

    Quellcode

    1. ​ Dim output As String = Convert.ToString(parsejson)
    2. File.WriteAllText("C:\Temp\Configurations.json", output)

    Passt doch. Denn quasi so ist auch der offizielle Weg.
    IO.File.WriteAllText(DeinDateipfad, parsejson.ToString())
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Tja. Ab .NET Core 3.1 gibt es ja den System.Text.Json-Namespace, der dann ähnliche Funktionalitäten ohne Zusatz-DLL zur Verfügung stellt. Aber da musste Dich selber reinfuchsen. Hatte noch nix damit zu tun.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.