private List<TimeZoneInfo> parseTimeZoneInfo(JsonObject root, List<String> prefix) {
    List<TimeZoneInfo> zones = new ArrayList<>();
    for (String label : objectKeys(root)) {
      JsonObject value = resolve(root, label);
      List<String> zone = new ArrayList<>(prefix);
      zone.add(label);
      if (isTimeZone(value)) {
        TimeZoneInfo info = parseTimeZoneObject(value, zone);
        zones.add(info);
      } else {
        zones.addAll(parseTimeZoneInfo(value, zone));
      }
    }
    return zones;
  }
private List < TimeZoneInfo > parseTimeZoneInfo ( JsonObject root , List < String > prefix ) { List < TimeZoneInfo > zones = new ArrayList < > ( ) ; for ( String label : objectKeys ( root ) ) { JsonObject value = resolve ( root , label ) ; List < String > zone = new ArrayList < > ( prefix ) ; zone . add ( label ) ; if ( isTimeZone ( value ) ) { TimeZoneInfo info = parseTimeZoneObject ( value , zone ) ; zones . add ( info ) ; } else { zones . addAll ( parseTimeZoneInfo ( value , zone ) ) ; } } return zones ; }
Recursively parse the zone labels until we get to a zone info object.