import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

class Edit_Details_OnlyAdmin_Loop {

    public void Edit_Details_OnlyAdmin_Loop_main(int Option, String newVal, String credUserName, String credPwd) {
        try {
            JSONParser parser = new JSONParser();

            JSONArray a = (JSONArray) parser.parse(new FileReader(Main.databasepath));
            // System.out.println("a is"+a);

            switch (Option) {
                case 1:
                    for (Object o : a) {
                        // System.out.println("o is"+o);

                        JSONObject User = (JSONObject) o;
                        // System.out.println("user is:" + User);

                        String Username = (String) User.get("Username");
                        String Pwd = (String) User.get("Password");
                        // JSONObject new1= (JSONObject) User.get("Name");
                        if (credUserName.equals(Username) && credPwd.equals(Pwd)) {
                            // System.out.println(User.remove("Name"));
                            User.put("Name", newVal);
                            // System.out.println("updated successfully");

                        }

                    }
                    break;
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        }

    }
}

Código anterior, dentro del bucle for, el json .put () había intentado que el sistema imprimiera el .put y devolviera un valor en lugar de una función void ... solo quiero reemplazar mi valor dentro del archivo json usando el .put () ... todos los parámetros pasados ​​son correctos, han sido comprobados uno por uno

A continuación está mi archivo de base de datos

[{"Role":"1","AssesType":"","Username":"","Module":"","Marks":"","Name":"q","Password":"123","Programme":""},{"Role":"3","AssesType":"1","Username":"tp054660","Module":"2","Marks":"","Name":"yaphanyee","Password":"123","Programme":"1"},{"Role":"3","AssesType":"2","Username":"tp054660","Module":"2","Marks":"","Name":"yaphanyee","Password":"123","Programme":"1"},{"Role":"1","AssesType":"","Username":"jsn","Module":"","Marks":"","Name":"jason","Password":"123","Programme":""},{"Role":"1","AssesType":"","Username":"123","Module":"","Marks":"","Name":"tp054660","Password":"123","Programme":""}]

El código anterior demuestra el esfuerzo de cambiar el valor almacenado como clave 'Nombre' y reemplazarlo con nuevos datos de entrada ...

Y put () no funciona como se esperaba, tampoco hay ningún error de captura

-3
HanYee Yap 28 ago. 2020 a las 13:14

1 respuesta

La mejor respuesta

Debe escribir sus datos JSON modificados en el disco si desea ver los cambios reales en su archivo.

Use un código similar al siguiente (no estoy completamente seguro de algunos de sus tipos de datos, por lo que puede haber pequeños errores de compilación):

try (FileWriter file = new FileWriter(Main.databasepath)) {
    file.write(a.toJSONString());
    file.flush();
} catch (IOException e) {
    e.printStackTrace();
}
1
sina 28 ago. 2020 a las 11:04