Создать JSONObject в JSONArray (JSON-Simple / JAVA) - PullRequest
0 голосов
/ 06 января 2019

Итак, у меня много проблем с добавлением нового JSONObject в мой JSONArray.

Мой код написан на испанском языке, поэтому я постараюсь как можно лучше перевести переменные и методы на английский в моих комментариях.

Это мой .JSON (пользователь по умолчанию имеет все атрибуты как "admin"):

{"Usuarios":[{"nombre":"Admin","apellido":"Admin","direccion":"Admin","telefono":"Admin","correo":"Admin@admin.com","username":"admin","password":"admin"}]}

Во-первых, я создал функции, которые могут без проблем проверять атрибуты моего пользователя "admin". Таким образом, при чтении файла JSON проблем не возникает, только запись в него:

Итак, вот проблема с этой функцией:

public void agregarUsuario(String nombre, String apellido, String direccion, String telefono, String correo, String username, String password) //this function add a new user object to my array in the json
{
    try {
        JSONObject usuarios = getJSONObjectFromFile("/usuarios.json"); //Json object "usuarios"/"users" is my main json obj file
        JSONArray listaUsuario = usuarios.getJSONArray("Usuarios");     //I've start my array "Usuarios" (who is in my .json)
        JSONObject newObject = new JSONObject();                        //I created a new JSONObjectVariable, with the attributes i want in it
        newObject.put("nombre", nombre);
        newObject.put("apellido", apellido);
        newObject.put("direccion", direccion);
        newObject.put("telefono", telefono);
        newObject.put("correo", correo);
        newObject.put("username",username);
        newObject.put("password", password);
                                                                        //at this point my new object has all the attributes i want to put in my array
        listaUsuario.put(newObject);                                    //so here i tried to put in my array my new Json object
        usuarios.put("Usuarios",listaUsuario);                          //this line, is one of my attempts to figure out how to put the function working
                                                                        //it wasn't in the first time, but how listaUsuario.put(newObject) dint make any change in my .json...
                                                                        //with or without it doesn't do anything 
    }catch(JSONException e) {
        e.printStackTrace();
    }
 }

Эта функция, которая «пишет», не вносит никаких изменений в мой файл json «/usuarios.json», но на самом деле я могу читать мой json без проблем; например, эта другая функция моего проекта читает мой json-файл, чтобы увидеть, совпадают ли пароль и имена пользователей для входа в систему JFrame:

public boolean verificarInicioDeUsuario(String incomeUsername,String incomePassword) {
   JSONArray listaUsuario = usuarios.getJSONArray("Usuarios"); //gets in my "Usuarios"/"User" array
   for(int j=0;j<listaUsuario.length();j++) {                   //Start reading my array
        JSONObject user = listaUsuario.getJSONObject(j);        //i make a new JSONObject for use it to compare my strings
        if((user.getString("username").equals(incomeUsername))&&(user.getString("password").equals(incomePassword))) { //I compare my object username attributes with my incomeStrings
        return true;     //if the username and password matches in the same object, returns true
        }
     }
     return false; //if not, returns false
 }

Любое предложение / помощь? <3 </p>

1 Ответ

0 голосов
/ 06 января 2019

вы только изменили загруженный объект JSON в память. Вы не записали это в файл. Пожалуйста, используйте приведенный ниже пример кода и внесите изменения в соответствии с вашей программой.

Итак, вот основная проблема: Вызовите toString для JSONObject, а затем сериализуйте строку. Сам JSONObject не сериализуем. поэтому вы должны использовать ниже:

String jsonString = jsonObject.toString();

пример кода:

 public void agregarUsuario(String nombre, String apellido, String direccion, String telefono, String correo, String username, String password) //this function add a new user object to my array in the json
{
    try {
        JSONObject usuarios = getJSONObjectFromFile("/usuarios.json"); //Json object "usuarios"/"users" is my main json obj file
        JSONArray listaUsuario = usuarios.getJSONArray("Usuarios");     //I've start my array "Usuarios" (who is in my .json)
        JSONObject newObject = new JSONObject();                        //I created a new JSONObjectVariable, with the attributes i want in it
        newObject.put("nombre", nombre);
        newObject.put("apellido", apellido);
        newObject.put("direccion", direccion);
        newObject.put("telefono", telefono);
        newObject.put("correo", correo);
        newObject.put("username",username);
        newObject.put("password", password);
                                                                        //at this point my new object has all the attributes i want to put in my array
        listaUsuario.put(newObject);                                    //so here i tried to put in my array my new Json object
        usuarios.put("Usuarios",listaUsuario);                          //this line, is one of my attempts to figure out how to put the function working
                                                                        //it wasn't in the first time, but how listaUsuario.put(newObject) dint make any change in my .json...
                                                                        //with or without it doesn't do anything 

        ObjectOutputStream outputStream = null;

           outputStream = new ObjectOutputStream(new FileOutputStream("/usuarios.json"));
           System.out.println("Start Writing in to file ");
            outputStream.writeObject(usuarios.toString());
            outputStream.flush();
            outputStream.close();

    }catch(JSONException e) {
        e.printStackTrace();
    }
    catch (Exception e){
        System.err.println("Error writting json: " + e);
    }
 }
...