Java Program to Implement a JSON Parser - GeeksforGeeks

30 Sep, 2021
JSON is commonly used in order to exchange data to and back fro from a  web server. The key point here is when we are getting the data from the webserver then it is returned always as a string so do we need t take care in our java program. 
Illustration:
{"Geeks", "NIT", "Male", "30"}
This data is returned by JSON parser as a JavaScript object so do it becomes as follows:
const object = JSON.parse({"Geeks", "NIT", "Male", "30"}) ;
So do the same dealing is computed with arrays while JSON s parsing data. Let us write a java program invoking methods to make it simpler to grasp how JSON parser is implemented.
Example
Java
// Java Program to Implement JSON Parser // Importing required classesimport java.util.ArrayList;import java.util.Collections;import java.util.HashMap; // Defining constants for json parsersenum CONSTANTS {     CURLY_OPEN_BRACKETS('{'),    CURLY_CLOSE_BRACKETS('}'),    SQUARE_OPEN_BRACKETS('['),    SQUARE_CLOSE_BRACKETS(']'),    COLON(':'),    COMMA(','),    SPECIAL('|');     private final char constant;     // Constructor    CONSTANTS(char constant) { this.constant = constant; }     // Method    // Overriding exiting toString() method    @Override public String toString()    {        return String.valueOf(constant);    }} // Class 1// To parse json objectclass JSONObject {     private final static char specialChar;    private final static char commaChar;    private HashMap<String, String> objects;     static    {        specialChar = String.valueOf(CONSTANTS.SPECIAL)                          .toCharArray()[0];        commaChar = String.valueOf(CONSTANTS.COMMA)                        .toCharArray()[0];    }     // Constructor if this class    public JSONObject(String arg) { getJSONObjects(arg); }     // Method 1    // Storing json objects as key value pair in hash map    public void getJSONObjects(String arg)    {         objects = new HashMap<String, String>();         if (arg.startsWith(String.valueOf(                CONSTANTS.CURLY_OPEN_BRACKETS))            && arg.endsWith(String.valueOf(                CONSTANTS.CURLY_CLOSE_BRACKETS))) {             StringBuilder builder = new StringBuilder(arg);            builder.deleteCharAt(0);            builder.deleteCharAt(builder.length() - 1);            builder = replaceCOMMA(builder);             for (String objects : builder.toString().split(                     String.valueOf(CONSTANTS.COMMA))) {                 String[] objectValue = objects.split(                    String.valueOf(CONSTANTS.COLON), 2);                 if (objectValue.length == 2)                    this.objects.put(                        objectValue[0]                            .replace("'", "")                            .replace("\"", ""),                        objectValue[1]                            .replace("'", "")                            .replace("\"", ""));            }        }    }     // Method 2    public StringBuilder replaceCOMMA(StringBuilder arg)    {         boolean isJsonArray = false;         for (int i = 0; i < arg.length(); i++) {            char a = arg.charAt(i);             if (isJsonArray) {                 if (String.valueOf(a).compareTo(                        String.valueOf(CONSTANTS.COMMA))                    == 0) {                    arg.setCharAt(i, specialChar);                }            }             if (String.valueOf(a).compareTo(String.valueOf(                    CONSTANTS.SQUARE_OPEN_BRACKETS))                == 0)                isJsonArray = true;            if (String.valueOf(a).compareTo(String.valueOf(                    CONSTANTS.SQUARE_CLOSE_BRACKETS))                == 0)                isJsonArray = false;        }         return arg;    }     // Method 3    // Getting json object value by key from hash map    public String getValue(String key)    {        if (objects != null) {            return objects.get(key).replace(specialChar,                                            commaChar);        }        return null;    }     // Method 4    // Getting json array by key from hash map    public JSONArray getJSONArray(String key)    {        if (objects != null)            return new JSONArray(                objects.get(key).replace('|', ','));        return null;    }} // Class 2// To parse json arrayclass JSONArray {     private final static char specialChar;    private final static char commaChar;     private ArrayList<String> objects;     static    {        specialChar = String.valueOf(CONSTANTS.SPECIAL)                          .toCharArray()[0];        commaChar = String.valueOf(CONSTANTS.COMMA)                        .toCharArray()[0];    }     // Constructor of this class    public JSONArray(String arg) { getJSONObjects(arg); }     // Method 1    // Storing json objects in array list    public void getJSONObjects(String arg)    {         objects = new ArrayList<String>();         if (arg.startsWith(String.valueOf(                CONSTANTS.SQUARE_OPEN_BRACKETS))            && arg.endsWith(String.valueOf(                CONSTANTS.SQUARE_CLOSE_BRACKETS))) {             StringBuilder builder = new StringBuilder(arg);             builder.deleteCharAt(0);            builder.deleteCharAt(builder.length() - 1);             builder = replaceCOMMA(builder);             // Adding all elements            // using addAll() method of Collections class            Collections.addAll(                objects,                builder.toString().split(                    String.valueOf(CONSTANTS.COMMA)));        }    }     // Method 2    public StringBuilder replaceCOMMA(StringBuilder arg)    {        boolean isArray = false;         for (int i = 0; i < arg.length(); i++) {            char a = arg.charAt(i);            if (isArray) {                 if (String.valueOf(a).compareTo(                        String.valueOf(CONSTANTS.COMMA))                    == 0) {                    arg.setCharAt(i, specialChar);                }            }             if (String.valueOf(a).compareTo(String.valueOf(                    CONSTANTS.CURLY_OPEN_BRACKETS))                == 0)                isArray = true;             if (String.valueOf(a).compareTo(String.valueOf(                    CONSTANTS.CURLY_CLOSE_BRACKETS))                == 0)                isArray = false;        }         return arg;    }     // Method  3    // Getting json object by index from array list    public String getObject(int index)    {        if (objects != null) {            return objects.get(index).replace(specialChar,                                              commaChar);        }         return null;    }     // Method 4    // Getting json object from array list    public JSONObject getJSONObject(int index)    {         if (objects != null) {            return new JSONObject(                objects.get(index).replace('|', ','));        }         return null;    }} // Class 3// To parse json stringpublic class Parser {     // json string with user data    // Custom data been passed as in arguments    private final static String jsonString        = "{'name':'user','id':1234,'marks':[{'english':85,'physics':80,'chemistry':75}]}";     // Main driver method    public static void main(String[] args)    {         // Parse json object for user data        JSONObject user = new JSONObject(jsonString);         // Get json array for user's marks        JSONArray marks = user.getJSONArray("marks");         // Get json object for subject's marks        JSONObject subjects = marks.getJSONObject(0);         // Print and display commands        System.out.println(            String.format("English marks - %s",                          subjects.getValue("english")));        System.out.println(            String.format("Physics marks - %s",                          subjects.getValue("physics")));        System.out.println(            String.format("Chemistry marks - %s",                          subjects.getValue("chemistry")));    }}
English marks - 85
Physics marks - 80
Chemistry marks - 75
 
simranarora5sos
Blogathon-2021
JSON
Picked
Blogathon
Java
Java Programs
Java
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
How to Create a Table With Multiple Foreign Keys in SQL?
How to Import JSON Data into SQL Server?
Stratified Sampling in Pandas
How to Install Tkinter in Windows?
Python program to convert XML to Dictionary
Arrays in Java
Split() String method in Java with examples
For-each loop in Java
Object Oriented Programming (OOPs) Concept in Java
HashMap in Java with Examples