Search code examples
javajsonarraylistjavax.json

Converting list data into Json using javax package classes


I can not use any third party library so I have mentioned in subject line. this line throwing exception. obj.put("CanonicalName", data.getItemname());

I have a list which is of EntityData type. EntityData is POJO which has 2 columns with getter setter and toString..

public class EntityData {

    private JsonValue itemname; //I can change datatype to String if it helps to reolve issue
    private String operation;
}

my list is List<EntityData> dataList= new ArrayList<EntityData>(); if I print sout(dataList) then below is my data. it calls toString.

[EntityData [itemname="Apple Computers", operation=add], EntityData [itemname="Infosys", operation=add], EntityData [itemname="Wipro", operation=add], EntityData [itemname="Google India", operation=update], EntityData [itemname="Amazon India", operation=update], EntityData [itemname="Capgemini", operation=add], EntityData [itemname="Cognizant", operation=add], EntityData [itemname="Cognizant", operation=delete]]

so file contains itemname and operation(add,delete,update). I need to write list data in below format.

    {
      "delete": [
        {
          "canonicalName": "TCS"
        }
      ],
      "update": [
        {
          "canonicalName": "Google India"
        },
        {
          "canonicalName": "Amazon India"
        }
      ],
      "add": [
        {
          "canonicalName": "Apple Computers"
        },
        {
          "canonicalName": "Infosys"
        },
        {
          "canonicalName": "Wipro"
        },
        {
          "canonicalName": "Capgemini"
        },
        {
          "canonicalName": "Cognizant"
        }
      ]
    }

I was writing below code but i am getting error.

JsonObject obj = JsonObject.EMPTY_JSON_OBJECT;
        
        JsonArray delete= JsonArray.EMPTY_JSON_ARRAY;
        JsonArray modify= JsonArray.EMPTY_JSON_ARRAY;
        JsonArray add= JsonArray.EMPTY_JSON_ARRAY;
        
        for(EntityData data:dataList)
        {
            switch(data.getOperation())
            {
            case "delete":
                obj.put("CanonicalName", data.getItemname() );
                delete.add(obj);
                break;
                
            case "update":
                obj.put("CanonicalName", data.getItemname() );
                modify.add(obj);
                break;
                
            case "add":
                obj.put("CanonicalName", data.getItemname() );
                add.add(obj);
                break;
                
            default:
                break;
            }
        }
        
        System.out.println(obj);

It is throwing below exception

Exception in thread "main" java.lang.UnsupportedOperationException
    at java.util.AbstractMap.put(Unknown Source)
    at com.shruti.jdbc.ReadData.main(ReadData.java:86)
        

. I dont know how to handle it. I can not use any third party library. I have to use java libraries of oracle only. basically I dont know how to create object of JsonObject and insert data into it. If any other java library available pleas help.


Solution

  • Try to create new JsonObject when adding in JsonArray and create a root object to add 3 type of operation data array

        JsonArray delete= JsonArray.EMPTY_JSON_ARRAY;
        JsonArray modify= JsonArray.EMPTY_JSON_ARRAY;
        JsonArray add= JsonArray.EMPTY_JSON_ARRAY;
        
        for(EntityData data:dataList)
        {
            switch(data.getOperation())
            {
            case "delete":
                JsonObject obj1 = JsonObject.EMPTY_JSON_OBJECT; 
                obj1.put("CanonicalName", data.getItemname() );
                delete.add(obj1);
                break;
                
            case "update":
                JsonObject obj2 = JsonObject.EMPTY_JSON_OBJECT; 
                obj2.put("CanonicalName", data.getItemname() );
                modify.add(obj2);
                break;
                
            case "add":
                JsonObject obj3 = JsonObject.EMPTY_JSON_OBJECT; 
                obj3.put("CanonicalName", data.getItemname() );
                add.add(obj3);
                break;
                
            default:
                break;
            }
        }
        JsonObject rootObj = JsonObject.EMPTY_JSON_OBJECT; 
        rootObj.put("delete", delete);
        rootObj.put("update", modify);
        rootObj.put("add", add);