3 ways to convert String to JSON object in Java?

It's very common nowadays to receive JSON String from a Java web service instead of XML, but unfortunately, JDK doesn't yet support conversion between JSON String to JSON object. Keeping JSON as String always is not a good option because you cannot operate on it easily, you need to convert it into JSON object before you do anything else e.g. retrieve any field or set different values. Fortunately, there are many open source library which allows you to create JSON object from JSON formatted String e.g. Gson from Google, Jackson, and json-simple. In this tutorial, you will learn how to use these 3 main libraries to do this conversion with step by step examples.

Even though you can use a simple or complex JSON String e.g. with lots of attributes and JSON arrays, I'll use following JSON String for example purpose:

jsonString = {
  "name" : "Ronaldo",
  "sport" : "soccer",
  "age" : 25,
  "id" : 121,
  "lastScores" : [ 2, 1, 3, 5, 0, 0, 1, 1 ]
}

It's simple, has 5 attributes, two of which are String and other two are numeric. One attribute, lastScore is a JSON array.



String to JSON Object using Gson

The Gson is an open source library to deal with JSON in Java programs. It comes from none other than Google, which is also behind Guava, a common purpose library for Java programmers. You can convert JSON String to Java object in just 2 lines by using Gson as shown below :

Gson g = new Gson();
Player p = g.fromJson(jsonString, Player.class)

You can also convert a Java object to JSON by using toJson() method as shown below

String str = g.toJson(p);

The good thing about Gson is that its feature rich and comes from Google, which is known for performance. Btw, if you are not very familiar with JSON format itself, I would suggest reading Beginning JSON by Ben Smit to learn more. It's a must that you know some basics of JSON before encoding and decoding Java objects to JSON.


JSON String to Java object using JSON-Simple

The JSON-Simple is another open source library which supports JSON parsing and formatting. The good thing about this library is its small size, which is perfect for memory constraint environments like J2ME and Android.

JSONParser parser = new JSONParser();
JSONObject json = (JSONObject) parser.parse(stringToParse);

The good thing about json-simple is that it is also JDK 1.2 compatible, which means you can use it on a legacy project which is not yet in Java 5.

3 ways to convert String to JSON object in Java?


String to JSON - Jackson Example

Jackson is I guess the most popular JSON parsing library in Java world. It's fast, feature rich and supports streaming which is great for parsing large JSON output from web services. Following one liner convert JSON string representing a soccer player into a Java class representing player:

Player ronaldo = new ObjectMapper().readValue(jsonString, Player.class);

One of the drawbacks of Jackson is that it requires JDK 1.5 so if you are stuck in earlier Java version than it may not fit there. Also, Jackson doesn't support J2ME, but one of the main advantages of using Jackson is that it supports streaming which can be used to parse huge JSON response without loading it fully in memory.

You can read more about how to parse JSON String to Java object using these libraries on Developing RESTful Services with JSON, one of the good books which explain how to use consume JSON data from web services.


That's all about how to convert String to JSON object in Java. You can use any of the json-simple, Gson or Jackson for parsing JSON messages received from web services, each of them has their own advantage. Json-simple has small memory footprint means it's quite suitable for J2ME and Android client, while Jackson is feature rich so better supported for a large project. Gson is in between them and my favorite general purpose JSON parser in Java programs.


Other JSON tutorials for Java programmers
  • 5 JSON libraries Java JEE Programmer should know (list)
  • How to parse JSON to/from Java Object using Jackson? (tutorial)
  • How to convert JSON array to String array in Java using Gson? (tutorial)
  • How to parse large JSON file using Jackson Streaming API? (example)
  • How to use Google Protocol Buffer (protobuf) in Java? (tutorial)
  • Top 10 RESTful Web Service Interview Questions (see here)
  • What is the purpose of different HTTP methods in REST? (see here)

References

1 comment:

  1. Thank you for the examples. Nice post. Can you please also tell which library gives best performance? Also, which library supports a lenient conversion? What I mean by lenient is, an attribute is defined in json but not in the java class, and vice versa ;still gets successfully converted
    Thanks
    Abhijeet

    ReplyDelete