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

