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 classes import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; // Defining constants for json parsers enum 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 object class 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 array class 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 string public 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