Wert in einer json Datei ändern und speichern

Jhue89

Bekanntes Mitglied
Guten Morgen Zusammen,

ich versuche gerade eine Json Datei zu bearbeiten, aber ich komm nicht so recht weiter.

Ich lese mir eine Json Datei ein und überprüfe einige Objekte auf null. Wenn ein bestimmter Wert null ist, soll ein Popup Fenster geöffnet werden in dem ich den Wert eintragen kann.
Dieser Wert soll dann in der Datei abgespeichert werden.

Momentan sehe ich eigentlich nur die Möglichkeit die Komplette Datei zu überschreiben. Habt ihr noch eine andere Möglichkeit?

Angehängt habe ich die Funktion mit der die Datei geöffnet wird. Mein Gedanke war, wenn die Datei bereits geöffnet ist, kann ich auch direkt den Wert abfragen, ändern und speichern.

Java:
package MultiPackClasses;

import java.awt.event.WindowAdapter;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileNameExtensionFilter;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;

import MuliPack.NeuerFrame;
import MuliPack.popUpEditSize;
import MuliPack.*;

public class getJson
{

    public Boxdata  loadJsonFile(String dirPath, String boxtype,  Boxdata boxdaten )
    {
        
        
        
        if(dirPath ==""  || dirPath == null) // Dateipfad fehlt
        {
            System.out.println("Load json: kein Dateipfad angegeben");
            JOptionPane.showMessageDialog(null, "Ausgewählte Datei "+ boxdaten + " existiert nicht!" , "Achtung!", JOptionPane.INFORMATION_MESSAGE);
            return boxdaten;
        }
        else
        {
              File file = new File(dirPath);
                
                GsonBuilder gsonBuilder = new GsonBuilder();
                gsonBuilder.setPrettyPrinting();
                gsonBuilder.serializeNulls();
                Gson gsonB = gsonBuilder.create();
            
                try
                {
                    FileInputStream fi = new FileInputStream(file);
                    String content = new String(Files.readAllBytes(Paths.get(file.toURI())), "UTF-8");
                    
                    JsonArray para = gsonB.fromJson(content, JsonArray.class); // Hiermit wird der Dateiinhalt Eingelesen und als Json Geparst
                    
                    switch(boxtype)
                    {
                    case "boxpara":       
                        System.out.println("Boxpara aufruf");
                        boxdaten.BoxGraphicsPath = para.get(2).getAsJsonObject() // Hol 3. Objekt aus dem Array
                       .getAsJsonObject("GENERAL")                // Hole General als Objekt   
                       .get("PICTURE").getAsString();            // Hole PRODID als String
                        
                        boxdaten.BoxCardUUID = para.get(2).getAsJsonObject() // Hol 3. Objekt aus dem Array
                        .getAsJsonObject("GENERAL")                // Hole General als Objekt   
                        .get("UUID").getAsString();            // Hole UUID als String
                        
                        boxdaten.BoxdataName = para.get(2).getAsJsonObject() // Hol 3. Objekt aus dem Array
                        .getAsJsonObject("DEFAULTS")                // Hole Defaults als Objekt   
                        .get("BOXDATA").getAsString();            // Hole PRODID als String
                      
                        
                        // Überpüfe ob Lenght_Outside = null ist
                        // !!!!!!!!!!!!!!! In dieser If Anweisung soll der Wert zurückgeschriebn werden.!!!!!!!!!!!!!!!
                        
                        if (para.get(2).getAsJsonObject().getAsJsonObject("SIZE").get("LENGTH_OUTSIDE").isJsonNull())   
                        {
                            System.out.println( "LENGHT_DATEN: Kein Wert vorhanden:");
                        
                        
                            String test = "";
                        //    para.get(2).getAsJsonObject().getAsJsonObject("SIZE").add("LENGHT_OUTSIDE",test);
                            test = JOptionPane.showInputDialog("LENGHT_OUTSIDE", "");
                            para.get(2).getAsJsonObject().getAsJsonObject("SIZE").add("LENGTH_OUTSIDE",gsonB.toJsonTree(test));
                            
                            
                            System.out.println(para.get(2).toString());
                        //    boxdaten ="";
                        }
                        else
                        {
                            System.out.println( para.get(2).getAsJsonObject().getAsJsonObject("SIZE").get("LENGTH_OUTSIDE").toString());
                            
                        }
                        break;
                    case "boxdata":
                        
                            boxdaten.TrimSide = holedate(para, "PARAMETERS", "TRIM_SIDE");
                        /*    boxdaten.X = holedate(para, "PARAMETERS", "X");
                            boxdaten.Y = holedate(para, "PARAMETERS", "Y");
                            boxdaten.Z = holedate(para, "PARAMETERS", "Z");
                            boxdaten.W = holedate(para, "PARAMETERS", "W");
                            boxdaten.S = holedate(para, "PARAMETERS", "S");
                            boxdaten.T = holedate(para, "PARAMETERS", "T");
                            boxdaten.A = holedate(para, "PARAMETERS", "A");
                            boxdaten.B = holedate(para, "PARAMETERS", "B");
                            boxdaten.C = holedate(para, "PARAMETERS", "C");
                            System.out.println("Erledigt");
                        */   
                            // Über Hashmap
                        //    ((HashMap<String, String> map = new HashMap<>();

                            //map.values().p
                        //    mapping daten = new mapping();
                            
                            boxdaten.Parameters.put("X", holedate(para, "PARAMETERS", "X"));
                            boxdaten.Parameters.put("Y", holedate(para, "PARAMETERS", "Y"));
                            boxdaten.Parameters.put("Z", holedate(para, "PARAMETERS", "Z"));
                            boxdaten.Parameters.put("W", holedate(para, "PARAMETERS", "W"));
                            boxdaten.Parameters.put("S", holedate(para, "PARAMETERS", "S"));
                            boxdaten.Parameters.put("T", holedate(para, "PARAMETERS", "T"));
                            boxdaten.Parameters.put("A", holedate(para, "PARAMETERS", "A"));
                            boxdaten.Parameters.put("B", holedate(para, "PARAMETERS", "B"));
                            boxdaten.Parameters.put("C", holedate(para, "PARAMETERS", "C"));
                            
                             System.out.println("Daten aus der Map: " + boxdaten.Parameters);
                            
                        break; 
                        
                    default:
                        System.out.println("Boxtype existiert nicht");
                        break;
                    }
                    
                fi.close();
                return boxdaten;   
                
                } catch (IOException e)
                {
                    System.out.println("Datei nicht VORHANDEN Fehler");
                    e.printStackTrace();
                    return boxdaten;   
                }
            }       
    }
    
    public String holedate (JsonArray para, String objekt, String value)
    {
        String boxdaten;
        if (para.get(2).getAsJsonObject().getAsJsonObject(objekt).get(value) == null)
        {
            System.out.println( value + ": Variable nicht vorhanden");
            boxdaten = null;
            //boxdaten ="";
        }
        else if (para.get(2).getAsJsonObject().getAsJsonObject(objekt).get(value).isJsonNull())   
        {
            System.out.println( value + ": Kein Wert vorhanden:");
            boxdaten ="";
        }
        
        else
        {               
            boxdaten= para.get(2).getAsJsonObject() // Hol 3. Objekt aus dem Array
           .getAsJsonObject(objekt)                // Hole PARAMETERS als Objekt   
           .get(value).getAsString();            // Hole PRODID als String
            System.out.println( value + ": " +boxdaten);
        }
        
        
        return boxdaten;
        
    }
}
 
K

kneitzel

Gast
Du kannst nur die Datei Überschreiben.

Wie sollte das einfügen auch funktionieren? Du hast bei JSON ja eine Struktur, d.h. die Elemente müssen innerhalb des vorhandenen Textes eingefügt werden. Und somit hast Du bei der Datei etwas, das Du Dir wir ein kariertes Blatt Papier vorstellen kannst. Und da kannst Du pro Kästchen ein Zeichen schreiben. Wenn Du also da etwas drauf geschrieben hast, dann kannst Du nur anfügen und nicht mitten drin etwas einfügen.
 

Jhue89

Bekanntes Mitglied
Du kannst nur die Datei Überschreiben.

Wie sollte das einfügen auch funktionieren? Du hast bei JSON ja eine Struktur, d.h. die Elemente müssen innerhalb des vorhandenen Textes eingefügt werden. Und somit hast Du bei der Datei etwas, das Du Dir wir ein kariertes Blatt Papier vorstellen kannst. Und da kannst Du pro Kästchen ein Zeichen schreiben. Wenn Du also da etwas drauf geschrieben hast, dann kannst Du nur anfügen und nicht mitten drin etwas einfügen.
Ohh das ging aber schnell.
Also muss ich tatsachlich die Datei Neu erstellen und anschließend überschreiben.
Ich dachte für Json gibt es da andere Möglichkeiten.

Aber gut dann muss ich das wohl so machen.
Alles Klar Danke.
 
K

kneitzel

Gast
Also bei dem Überschreiben sollten aus meiner Sicht die File-Opertionen wirklich nur ein auf 0 setzen und neu schreiben sein.

Hintergrund sind die notwendigen Rechte. Datei löschen und dann neu erstellen benötigt deutlich mehr Rechte auf dem Verzeichnis. Datei überschreiben braucht nur Schreibrechte auf der Datei.

Der Part kann in Java z.B. einfach über einen FileWriter gemacht werden, der nicht anfügen soll (zweiter Parameter des Konstruktors).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
FunkyPhil94 Wert in einer Lambda Funktion erhöhen Java Basics - Anfänger-Themen 3
M Spezifischen Wert einer Zeile aus .txt Datei entnehmen Java Basics - Anfänger-Themen 15
M Wie kann die Implementation einer Methode den Wert eines Attributs vermindern? Java Basics - Anfänger-Themen 3
M Methoden Wert einer Variable geht verloren? Java Basics - Anfänger-Themen 6
D Einen boolischen Wert aus einer Methode in einer anderen Klasse aufrufen? Java Basics - Anfänger-Themen 11
H Den Wert einer rekursiven Funktion bestimmen Java Basics - Anfänger-Themen 5
ms_cikar Den Wert einer Hex. value bestimmten. Java Basics - Anfänger-Themen 8
V_Fynn03 Erste Schritte Einen Wert in ein TextField einfügen aus einer anderen Klasse Java Basics - Anfänger-Themen 3
L Wert einer Webeseiteauslesen Java Basics - Anfänger-Themen 6
O Wert in einer Schleife unterschiedlich erhöhen Java Basics - Anfänger-Themen 2
J Wert eines Arrays einer Variable zuweisen, sobald der Wert eines anderen Arrays eintritt Java Basics - Anfänger-Themen 2
F Variablen If else: Einer Variable einen Wert hinzufügen oder so? Java Basics - Anfänger-Themen 6
G Wie kann man den Erfolg einer Zuweisung als Boolean Wert verwenden? Java Basics - Anfänger-Themen 12
O Wert in einer URL hinzufügen (in meinem Beispiel Google) Java Basics - Anfänger-Themen 7
J Wert einer Variable erhöhen Java Basics - Anfänger-Themen 5
K Zugriff auf Variabeln Wert einer Instanz Java Basics - Anfänger-Themen 4
S Umgebungsvariable Wert einer Variable global nutzen Java Basics - Anfänger-Themen 3
D Wert einer Variable in paint-Methode verwenden Java Basics - Anfänger-Themen 2
C einen wert aus einer arraylist in einem jField angeben Java Basics - Anfänger-Themen 2
O Variabeln aus einer andere Klasse dauerhaft einen anderen Wert übergeben Java Basics - Anfänger-Themen 5
M Inhalt/Wert aus einer JList ablesen Java Basics - Anfänger-Themen 5
D Wert einer Variable aus Klasse A mit Klasse B ändern Java Basics - Anfänger-Themen 11
J Methoden Wert im Block einer for-Schleife wird nicht aktualisiert Java Basics - Anfänger-Themen 9
K Datentypen Umwandlung einer Textfeldeingabe in einen binären Wert Java Basics - Anfänger-Themen 2
J Wie behalten Variablen den Wert, den sie in einer anderen Methode erhalten haben? Java Basics - Anfänger-Themen 14
B Wert einer while-Schleife nach Abarbeitung Java Basics - Anfänger-Themen 2
Y Übertragen von Wert von einer Klasse zu einer anderen Java Basics - Anfänger-Themen 3
S Wert in einer Klasse 1 ein-/ausgeben, in Klasse 2 ausrechen? Java Basics - Anfänger-Themen 3
D Inhalt einer Liste auf nur ein Wert überprüfen ohne die Liste komplett zu interieren Java Basics - Anfänger-Themen 6
S Wert einer Variable printen Java Basics - Anfänger-Themen 2
G Maximalen Wert einer ArrayList ausgeben Java Basics - Anfänger-Themen 11
B Wert einer Variable mit Listener ueberwachen Java Basics - Anfänger-Themen 3
B Wert einer String Variable an andere String Variable in anderer Klasse uebergeben Java Basics - Anfänger-Themen 5
H Höchsten int-Wert(key) aus einer Hashmap suchen Java Basics - Anfänger-Themen 19
B vorletzten Wert aus einer Reihe bekommen Java Basics - Anfänger-Themen 6
N Wert einer Variable aus einem Javaproramm auslesen. Java Basics - Anfänger-Themen 2
E Boolean wert innerhalb einer Tabelle ändern Java Basics - Anfänger-Themen 4
M Wert von einer Methode in eine Andere übergeben Java Basics - Anfänger-Themen 6
G Wert in Zeile an einer bestimmten Stelle ersetzen Java Basics - Anfänger-Themen 2
M den kleinsten und größten Wert aus einer Datei finden! Java Basics - Anfänger-Themen 4
S einer Variable KEINEN Wert zuweisen? Java Basics - Anfänger-Themen 7
G Wert in einer Zelle ersetzen Java Basics - Anfänger-Themen 4
A Wert einer Variable an eine Methode in einer anderen Klasse. Java Basics - Anfänger-Themen 4
V Wie übergebe ich einer Methode einen Wert per ActionListener Java Basics - Anfänger-Themen 2
R JTable - Wert einer selektierten Zelle auslesen Java Basics - Anfänger-Themen 1
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
A Negativ-Wert Java Basics - Anfänger-Themen 4
R finaler Wert in outerMethod von method in InnerMethodClass Java Basics - Anfänger-Themen 2
T Datum als Variable wert Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
Ostkreuz Wert von Arrays summieren Java Basics - Anfänger-Themen 1
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
K Java gleicher Wert von Zahlen? Java Basics - Anfänger-Themen 5
M Erste Schritte While Schleife / Ausgabe von buchstabe & ASCII Wert Java Basics - Anfänger-Themen 4
M Dialogbox solange abfragen, bis gültige Wert-Eingabe Java Basics - Anfänger-Themen 12
S Runden auf den niedrigsten Wert Java Basics - Anfänger-Themen 10
volcanos enum und switch (neu): falschen Wert mit IllegalArgumentException oder mit EnumConstantNotPresentException abfangen ? Java Basics - Anfänger-Themen 51
F Wie kann ich eine Funktion schreiben, die nur in bestimmten Fällen einen Wert zurückgibt? Java Basics - Anfänger-Themen 5
T Mit jedem Wert in der for-Schleife weiter arbeiten Java Basics - Anfänger-Themen 3
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 5
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 4
java-starter Erste Schritte Eingabe in Char wert umwandeln Java Basics - Anfänger-Themen 7
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
sserio TXT-Datei Auslesen und den Wert jedes Namen ausrechnen etc. Java Basics - Anfänger-Themen 37
M Warum return die Methode den Wert nicht Java Basics - Anfänger-Themen 5
I Historisierung - Alter Wert, Neuer Wert... wie speichern? Java Basics - Anfänger-Themen 44
J Wert in Dropdown Menü kursiv schrieben Java Basics - Anfänger-Themen 19
H Uhrzeitespanne in Integer Wert umrechnen Java Basics - Anfänger-Themen 1
H Java verkettete Liste, Wert eines Index zurückgeben Java Basics - Anfänger-Themen 1
M Wie kann eine Methode für ein vorhandenes "Array von char" einen Index-Wert zurückliefern? Java Basics - Anfänger-Themen 3
M Wie kann ich festlegen, dass ein Attribut maximal den Wert 0 erreicht, also nicht in den negativen Bereich fällt? Java Basics - Anfänger-Themen 4
U Ascii wert verschieben, wie möglich? Java Basics - Anfänger-Themen 3
B Array nach Wert prüfen rekursiv Java Basics - Anfänger-Themen 5
B in einem Array den nächstgelegenen Wert zu einem eingabewert finden Java Basics - Anfänger-Themen 8
T Algorithmus für Index mit min-Wert Java Basics - Anfänger-Themen 2
J Wert zurückgeben über get Methode Java Basics - Anfänger-Themen 8
E Slider - Wert übergeben und überschreiben Java Basics - Anfänger-Themen 5
G Input/Output getText() gibt keinen Wert! Java Basics - Anfänger-Themen 13
NaZuRe Geld(Wert) von der public static void main in die public static void Blackjack Java Basics - Anfänger-Themen 2
I Validation, ob String ein Wert aus einem Enum enthält Java Basics - Anfänger-Themen 3
S Aus verschachtelter ArrayList auf einen Wert zugreifen Java Basics - Anfänger-Themen 4
T Feststellen, dass Wert zu groß; Caesar Chiffre Java Basics - Anfänger-Themen 3
J maximaler Wert eines Integers Java Basics - Anfänger-Themen 14
I Format Problem mit Wert - bekomme 0,10 anstatt 10,00 Java Basics - Anfänger-Themen 6
H Methode über String Wert aufrufen Java Basics - Anfänger-Themen 8
G Rekursive Methode liefert augenscheinlich keinen boolean-Wert zurück. Java Basics - Anfänger-Themen 4
Lena_2611 Vergleich von Array1 Index mit Array2 Wert und erzeugen eines neues Arrays Java Basics - Anfänger-Themen 8
NeoLexx Abfrage mit instanceof führt zu unerwarteten Wert Java Basics - Anfänger-Themen 9
B Map<String, FilterMeta, wie Wert bekommen? Java Basics - Anfänger-Themen 4
J Eine Position im String durch einen Integer - Wert teilen Java Basics - Anfänger-Themen 5
S Integer Wert wird nicht übernommen Java Basics - Anfänger-Themen 2
V Boolean Wert nicht richtig erkannt Java Basics - Anfänger-Themen 4
H Datentypen Was für eine Format verbirgt sich hinter dem Integer-Wert 053? Java Basics - Anfänger-Themen 2
1 Array nimmt falschen Wert auf! Java Basics - Anfänger-Themen 2
S Erste Schritte Button einen Wert zuweisen & diesen ausgeben Java Basics - Anfänger-Themen 2
H Größte Duplikat (Größte Doppelte Wert) eines Arrays ausgeben Java Basics - Anfänger-Themen 9
J Wert zwischen JFrames übergeben Java Basics - Anfänger-Themen 2
J Umwandlung String zu ASCII-Wert und anders Java Basics - Anfänger-Themen 17

Ähnliche Java Themen

Neue Themen


Oben