Search code examples
javajsonmappingediting

JSON File - Java: editing/updating fields values


I have some JSONObject(s) in my workflow, and the same JSONObjects are stored by writting them into a json file.

I would like an efficient way to update the json file, only fields where is needed, with the content of newer JSONObjects instances.

Eg:

On file I have

ObjectOnFile = {key1:val1, key2:val2,...}

In memory I have

ObjectInMemory = {key1:val1_newer, key2:val2_newer,...}

The update will be like:

 if (!(ObjectInMemory.get(key1).equals(ObjectOnFile.get(key1)))
       // update file field value <--- how to?

In general I would like to update the value of every key where its content is newer (different).

Actually my code is:

import org.json.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;

ObjectMapper mapper = new ObjectMapper();
Sting key = "key1"; //whatever
JSONObject jo = new JSONObject("{key1:\"val1\", key2:\"val2\"}");
JSONObject root = mapper.readValue(new File(json_file), JSONObject.class);
JSONObject val_newer = jo.getJSONObject(key);
JSONObject val_older = root.getJSObject(key);
if(!val_newer.equals(val_older)){
   root.put(key,val_newer);
/*write back root to the json file...how? */
}

Solution

  • Simply you can do like this:

    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import com.fasterxml.jackson.databind.ObjectMapper;
    
    
    public class Test {
    
        public static void main(String[] args) throws JSONException, IOException 
        {
            ObjectMapper mapper = new ObjectMapper();
            String key = "key1"; //whatever
    
            JSONObject jo = new JSONObject("{key1:\"val1\", key2:\"val2\"}");
            //Read from file
            JSONObject root = mapper.readValue(new File("json_file"), JSONObject.class);
    
            String val_newer = jo.getString(key);
            String val_older = root.getString(key);
    
            //Compare values
            if(!val_newer.equals(val_older))
            {
              //Update value in object
               root.put(key,val_newer);
    
               //Write into the file
                try (FileWriter file = new FileWriter("json_file")) 
                {
                    file.write(root.toString());
                    System.out.println("Successfully updated json object to file...!!");
                }
            }
        }
    }