I Just came across a situation where I need to put the data in the JSONObject, while doing that I received a warning from the compiler regarding.

Type safety: The method put(Object, Object) belongs to the raw type HashMap. References to generic type HashMap should be parameterized.

I tried to parameterize the JSONObject but it gave me the error.

I am using following code where option is a Object.

JSONObject additionalDetails = new JSONObject();
additionalDetails.put("showOppo", option.isShowOppo());
additionalDetails.put("showCont", option.isShowCont());
additionalDetails.put("contActionTaken", option.isConActionTaken());
additionalDetails.put("oppoActionTaken", option.isOppoActionTaken());

How is this caused and how can I solve it?

6

There are 6 best solutions below

1
On BEST ANSWER

You are using JSON Simple. Its JSONObject is derived from HashMap but unfortunately doesn't use generic parameters (probably because it was created in pre-generic times). So the warnings you see are the same as in:

HashMap map = new HashMap();
map.put("showOppo", option.isShowOppo());

Unfortunately you can't avoid the warnings.

I would recommend to switch to another JSON library like GSON or Jackson.

0
On

Use this json implementation instead - it 100% resolves the issue! Note: use method toString() instead of toJSONString()

import org.json.JSONObject;

<!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20231013</version>
</dependency>
0
On

If option.isShowOppo() is returning boolean value. Try Boolean value= option.isShowOppo(); and then additionalDetails.put("showOppo",value);

5
On

I don't know if you still have this problem, but I think it will benefit others who came across this problem.

I came across this problem and after a while, I managed to get it fixed using a HashMap.

HashMap<String,Object> additionalDetails = new HashMap<String,Object>();
additionalDetails.put("showOppo", option.isShowOppo());
additionalDetails.put("showCont", option.isShowCont());
additionalDetails.put("contActionTaken", option.isConActionTaken());
additionalDetails.put("oppoActionTaken", option.isOppoActionTaken());

JSONObject additionalDetailsJSON = new JSONObject(additionalDetails);

If you don't know what type the hashmap will hold or if it holds multiple types, its safer to use Object. Otherwise use the proper type.

This solution works on json-simple 1.1.1 and Java 1.5 and up.

0
On

to avoid the warning and to better work I change it like that (when JSONObject additionalDetails)

import com.jayway.jsonpath.JsonPath;

 JsonPath.parse(additionalDetails).set(fieldPath, Value);
1
On

I recently face this problem.There are two libraries for JSONObject which is creating confusion for you You have used wrong json jar that is json-simple-1.1.jar, package that you imported is org.json.simple.JSONObject, use java-json.jar and import org.json.JSONObject download jar from http://www.java2s.com/Code/Jar/j/Downloadjavajsonjar.htm