【问题标题】:Create a JSONObject in a JSONArray (JSON-Simple / JAVA)在 JSONArray 中创建 JSONObject (JSON-Simple / JAVA)
【发布时间】:2019-01-06 09:18:46
【问题描述】:

所以,在我的 JSONArray 中添加新的 JSONObject 时遇到了很多麻烦。

我的代码是西班牙语的,所以我会尽力在我的 cmets 中将变量和方法翻译成英语。

这是我的 .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
 }

有什么建议/帮助吗?

【问题讨论】:

    标签: java arrays json json-simple


    【解决方案1】:

    您只是将加载的 JSON 对象更改为内存。您还没有将其写入文件。请使用以下代码示例并根据您的程序进行更改。

    所以这里的主要问题是: 在 JSONObject 上调用 toString,然后序列化字符串。 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);
        }
     }
    

    【讨论】:

    • 所以,它似乎有效! link
    • 请检查您的文件权限,或者您可以尝试使用上面的绝对文件路径链接。然后将其更改为相对路径。
    • 好吧,我已经做到了!现在我可以向我的 JSON 添加新对象了!谢谢link
    • 用 outputStream 试试。 writeUTF(usuarios.toString());而不是 outputStream.writeObject(usuarios.toString());
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    • 2012-07-20
    • 2013-09-29
    • 1970-01-01
    • 2011-11-09
    • 2015-12-14
    相关资源
    最近更新 更多