vaibhav
vaibhav

Reputation: 784

JSON-Simple causes compiler warning "Type safety: The method put(Object, Object) belongs to the raw type HashMap."

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?

Upvotes: 18

Views: 24043

Answers (6)

Russell Shaw
Russell Shaw

Reputation: 21

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>

Upvotes: 1

Vladi
Vladi

Reputation: 2000

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

Upvotes: 1

Amit Yadav
Amit Yadav

Reputation: 406

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

Upvotes: 1

Ashwin
Ashwin

Reputation: 561

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.

Upvotes: 38

Shono
Shono

Reputation: 57

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

Upvotes: 0

wero
wero

Reputation: 33010

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.

Upvotes: 14

Related Questions