Let’s start by understanding what is a JSON based API. JSON (Java Script Object Notation) is a lightweight data interchange format that is now being used as a profound and efficient way of gathering, collecting or sharing data among applications and interfaces. JSON provides data to its corresponding calling function in key, value pairs. ‘Key’ as in the variable and ‘value’ as in the corresponding value for the variable. The data that is parsed from a JSON API is in the form of object which needs to be converted into their respective data format as acceptable by the system.
I won’t go into much details into describing API’s in this blog post( may be in my upcoming one). REST (REpresentational State Transfer) is an architectural style and is an approach to communicate between different modules that is often used in the development of web services. So in this blog I would describe how can you use JAVA to leverage JSON data from a REST API.
Before starting, here is the REST API I am using to parse data into my system JSON-API.
Now what is the use of parsing JSON data from a web service when I can have it in my system already ? The answer to this would be, now a days maximum of the client data is available over the web as it is not prone to data loss. Moreover clients built around JSON API are able to take advantage of its features around efficiently caching responses, sometimes eliminating network requests entirely. So let’s proceed ahead and I would try to explain the process of parsing the data.
Pass the desired URL as an object. So that would be like
Type cast the URL object into a HttpURLConnection object. The benefit of doing it is that we would be able to harness the properties of the HttpURLConnection class to validate features. For example set the request type or check the status of the response code.
Set the request type as in whether the request to the API is a GET request or a POST request.
Open a connection stream to the corresponding API.
Get the corresponding response code.
Now I need to perform a check that if response code is not 200 then throw a runtime exception otherwise carry on the rest of the procedure. So the structure would be
I have used the method scanner to read each line from the API and fetch the data in string format. Now this part is inside else { } that I mentioned above.
So the parsed data would something like this
Now you have all the data with you from the API. But somehow it looks a bit unstructured and definitely rather than the whole data you would need it categorically. So for this you need to parse this data into JSON object. In some cases you need to store the data in JSON array as well.
JAVA by default does not have any inbuilt class or provide any inbuilt class, method to parse and store these data as objects. So, for that you need the classJSONObject (to store the corresponding string data as JSON objects), JSONArray (to hold JSON objects in an array) and JSONParser (to convert string object into JSON objects). For that you will need a package called SimpleJSON. Download the required jar files and configure its class path in the system.
Declare an instance of the JSONParser
Convert the string objects into JSON objects.
JSONObject jobj = (JSONObject)parse.parse(inline);
So if you view the JSON structure which would be something like this
I would now like to get the corresponding values under the results array. So here how you do it:
First convert the JSON object into JSONArray object like this
Once the JSON objects are stored in the array, read the corresponding JSONArray objects, convert it to JSON objects again. So you get the elements within the results array. So here is how you do it.
Let’s us dig a bit deeper. Suppose I want the components of “address_components”. Here is the JSON structure
So how would I get the components under the address_components array? Follow the same step as above
That's all I have about the subject, for more resources you can lookup the git hub link to help you out with Parsing Data from JSON REST API.