package com.mavlushechka.a1qa.utils; import org.json.simple.JSONObject; import org.json.simple.parser.ParseException; import java.io.FileReader; import java.io.IOException; import java.util.Map; import java.util.Optional; import java.util.TreeMap; public class JSONParser { private final static org.json.simple.parser.JSONParser jsonParser = new org.json.simple.parser.JSONParser(); private final static TreeMap parsedData = new TreeMap<>(); public static String parse(String filename, String key) { Map.Entry ceilingEntry = parsedData.ceilingEntry(filename + "."); String requiredData; if (ceilingEntry == null || !ceilingEntry.getKey().startsWith(filename + ".")) { parseFile(filename); } requiredData = parsedData.get(filename + "." + key); return Optional.ofNullable(requiredData).orElseThrow(() -> new IllegalArgumentException("Cannot find required data.")); } private static void parseFile(String filename) { JSONObject jsonObject; try (FileReader fileReader = new FileReader("src/main/resources/" + filename + ".json")) { jsonObject = (JSONObject) jsonParser.parse(fileReader); } catch (ParseException | IOException e) { throw new IllegalArgumentException("Cannot find required file."); } putToParsedData(jsonObject, filename); } private static void putToParsedData(JSONObject jsonObject, String filename) { for (int i = 0; i < jsonObject.keySet().size(); i++) { String[] keyValues = jsonObject.values().toArray()[i].toString().replaceAll("[{}\"\\\\]", "").split(","); for (String keyValue : keyValues) { String[] splitKeyValue = keyValue.split(":", 2); parsedData.put(filename + "." + jsonObject.keySet().toArray()[i] + "." + splitKeyValue[0], splitKeyValue[1]); } } } }