Here's a very rough idea of what I was talking about with entrySet():
String jsonStr =
"{\"symbol\":\"MSFT\",\"stock_exchange_short\":\"NASDAQ\",\"timezone_name\":\"America/New_York\",\"intraday\":{\"2020-01-09 15:42:56\":{\"open\":\"161.65\",\"close\":\"161.65\",\"high\":\"161.65\",\"low\":\"161.65\",\"volume\":\"41201\"},\n"
+ "\"2020-01-09 15:40:00\":{\"open\":\"161.60\",\"close\":\"161.60\",\"high\":\"161.62\",\"low\":\"161.57\",\"volume\":\"41201\"},\n"
+ "\"2020-01-09 15:35:00\":{\"open\":\"161.56\",\"close\":\"161.59\",\"high\":\"161.63\",\"low\":\"161.50\",\"volume\":\"140067\"},\n"
+ "\"2020-01-09 15:30:00\":{\"open\":\"161.57\",\"close\":\"161.55\",\"high\":\"161.64\",\"low\":\"161.54\",\"volume\":\"193546\"}}}";
var gson = new Gson();
var jsonObj = gson.fromJson(jsonStr, JsonObject.class);
var intraday = jsonObj.getAsJsonObject("intraday");
intraday.entrySet().forEach(e -> {
var stats = gson.fromJson(e.getValue(), JsonObject.class);
var sb = new StringBuilder(e.getKey());
sb.append(String.format("%n open %.2f%n", stats.get("open").getAsDouble()));
sb.append(String.format(" close %.2f%n", stats.get("close").getAsDouble()));
sb.append(String.format(" high %.2f%n", stats.get("high").getAsDouble()));
sb.append(String.format(" low %.2f%n", stats.get("low").getAsDouble()));
sb.append(String.format(" volume %d%n", stats.get("volume").getAsLong()));
System.out.print(sb.toString());
});