javajsongsonjson-simple

Store JSON data in Java


I want to learn JSON data storage in Java using Eclipse, so I googled a lot.

I found JSON.simple and GSON. Are those a good choice?

I went to Properties >> Java Build Path >> Add External JARs. I added json-simple-1.1.1.jar and google-gson-2.2.4-release.zip. Is it right? Where is the JavaDoc located?

Main problem concerns an example found here: JSON.simple example – Read and write JSON, which teaches about JSON.simple. I wrote the following code:

JSONObject object = new JSONObject();
JSONArray array = new JSONArray();
array.add("Bob");
array.add("John");
object.put("nicknames", array);
object.put("from", "US");
object.put("age", 35);
try {
    String path = "";
    FileWriter file = new FileWriter(path);
    String json = object.toJSONString();
    file.write(json);
    file.close();
} catch (IOException io) {
    // Fail
}

But I get the following warnings. What do these mean?

Type safety: The method add(Object) belongs to the raw type ArrayList. References to generic type ArrayList should be parameterized on 'JSONArray.add'

Type safety: The method put(Object, Object) belongs to the raw type HashMap. References to generic type HashMap<K,V> should be parameterized on 'JSONObject.put'

On a side note, how can I prettify my JSON?


Solution

  • I found JSON.simple and GSON. Are those a good choice?

    At the moment, I like the former very much, but the latter has more features, is more widely used, and is always up-to-date.

    Where is the JavaDoc located?

    For JSON.simple, see this answer on the site. For GSON, follow this link.

    I get some warnings. What do they mean?

    Those classes are declared without type parameters for their superclass:

    public class JSONObject extends HashMap {
        // ...
    }
    
    public class JSONArray extends ArrayList {
        // ...
    }
    

    When you call put() or add(), they are defined in the superclass, which is not parameterized properly.

    What you can do is add @SuppressWarnings("unchecked") to the container.

    How can I prettify my JSON?

    JSON.simple cannot do this, but GSON can:

    Gson gson = new GsonBuilder().setPrettyPrinting().create();