package com.mavlushechka.a1qa.utils; import com.google.gson.Gson; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; import java.util.Map; import java.util.TreeMap; public class JSONParser { private final static TreeMap parsedJSON = new TreeMap<>(); public static String parseData(String filename, String key) { return parse(filename, key, false); } public static String parseObject(String filename, String key) { return parse(filename, key, true); } public static boolean isJson(String json) { try { new JSONObject(json); } catch (JSONException jsonObjectException) { try { new JSONArray(json); } catch (JSONException jsonArrayException) { return false; } } return true; } public static boolean isBodyEmpty(String json) { return json.equals("{}"); } public static T convertToObject(String json, Class classToConvert) { return new Gson().fromJson(json, classToConvert); } public static String convertToJSON(T object) { return new Gson().toJson(object); } public static T[] convertArray(String json, Class classToConvert) { Gson gson = new Gson(); JSONArray jsonArray = new JSONArray(json); ArrayList objects = new ArrayList<>(); for (int i = 0; i < jsonArray.length(); i++) { objects.add(gson.fromJson(jsonArray.getJSONObject(i).toString(), classToConvert)); } return (T[]) objects.toArray(); } private static String parse(String filename, String key, boolean isObject) { Map.Entry ceilingEntry = parsedJSON.ceilingEntry(filename); if (ceilingEntry == null || !ceilingEntry.getKey().startsWith(filename)) { parseFile(filename); } return parseData(filename, key, isObject); } private static void parseFile(String filename) { parsedJSON.put(filename, new JSONObject(FileParser.parse("src/main/resources/" + filename + ".json"))); } private static String parseData(String JSONName, String key, boolean isObject) { JSONObject jsonObject = new JSONObject(parsedJSON.get(JSONName).toString()); String[] keys = key.split("\\."); for (int i = 0; i < keys.length-1; i++) { if (keys[i].contains("[") && keys[i].contains("]")) { String splitKey = keys[i].split("\\[")[0]; int index = Integer.parseInt(keys[i].split("\\[")[1].replaceAll("[\\[\\]]", "")); jsonObject = jsonObject.getJSONArray(splitKey).getJSONObject(index); } else { jsonObject = jsonObject.getJSONObject(keys[i]); } } if (isObject) { return jsonObject.getJSONObject(keys[keys.length-1]).toString(); } return jsonObject.getString(keys[keys.length-1]); } }