【问题标题】:Converting list data into Json using javax package classes使用 javax 包类将列表数据转换为 Json
【发布时间】:2020-11-24 16:53:57
【问题描述】:

我不能使用任何第三方库,所以我在主题行中提到了。 这一行抛出异常。 obj.put("CanonicalName", data.getItemname());

我有一个EntityData type 的列表。 EntityData 是 POJO,它有 2 列带有 getter setter 和 toString..

public class EntityData {

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

我的列表是 List<EntityData> dataList= new ArrayList<EntityData>(); 如果我打印 sout(dataList) 那么下面是我的数据。它调用 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 文件包含itemnameoperation(add,delete,update)。我需要按以下格式编写列表数据。

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

我正在编写下面的代码,但出现错误。

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);

抛出异常

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

。我不知道如何处理它。我不能使用任何第三方库。我只能使用 oracle 的 java 库。基本上我不知道如何创建 JsonObject 对象并将数据插入其中。如果有其他可用的 java 库,请提供帮助。

【问题讨论】:

    标签: java json arraylist javax.json


    【解决方案1】:

    在JsonArray中添加时尝试创建新的JsonObject,并创建根对象添加3类操作数据数组

        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);
    

    【讨论】:

    • 谢谢..但它仍然给出同样的例外。 com.shruti.jdbc.ReadData.main(ReadData.java:88) 处的 java.util.AbstractMap.put(Unknown Source) 处的线程“main”java.lang.UnsupportedOperationException 中的异常
    • 我实际上是在调试代码..这一行正在抛出异常。 obj.put("CanonicalName", data.getItemname());
    • 它完成了.. 我使用 JsonObjectBuilder 和 JsonArrayBuilder 而不是 Jsonobject 和 JsonArray 然后它工作得很好。 JsonObject 不允许修改。它是不可变的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 2019-02-08
    • 2023-02-23
    • 2021-01-01
    • 2015-03-04
    • 2017-01-13
    • 2010-10-07
    相关资源
    最近更新 更多