java – Leer valores de un json array que tiene secciones dentro del json

Tengo un json el cual tiene como una seccion dentro de el y en esa seccion ahi por decirlo asi otro json pequeño y no logro obtener los valores de ese:
El JSOn completo lo tengo en: List<Map<String, Object>> list = response.getBody(); ya que el api me devuelve un json dentro de las llaves ().

Las secciones que menciono son: settings dentro de esta seccion esta como un json pequeño con atributos card_number,bin,security_code y cada una de esas tiene otros valores como los pueden ver dentro de los que mencióne.
Esos valores son los que necesito obtener pero no lo logro obtener los valores de: validation, length, pattern, installments_pattern, installments_pattern etc...
MI JSON es.

{
        "id": "codensa",
        "name": "Crédito Fácil Codensa",
        "payment_type_id": "credit_card",
        "status": "active",
        "secure_thumbnail": "https://www.mercadopago.com/org-img/MP3/API/logos/codensa.gif",
        "thumbnail": "http://img.mlstatic.com/org-img/MP3/API/logos/codensa.gif",
        "deferred_capture": "unsupported",
        "settings": (
            {
                "card_number": {
                    "validation": "standard",
                    "length": 16
                },
                "bin": {
                    "pattern": "^(590712|529448)",
                    "installments_pattern": "^(590712|529448)",
                    "exclusion_pattern": null
                },
                "security_code": {
                    "length": 3,
                    "card_location": "back",
                    "mode": "mandatory"
                }
            }
        ),
        "additional_info_needed": (
            "cardholder_name",
            "cardholder_identification_number",
            "cardholder_identification_type"
        ),
        "min_allowed_amount": 1000,
        "max_allowed_amount": 5000000,
        "accreditation_time": null,
        "financial_institutions": (),
        "processing_modes": (
            "aggregator"
        )
    }

Mi código es el siguiente.

List<Map<String, Object>> list = response.getBody();

            for (Map<String, Object> map : list) {

                if (map.get("id").equals("visa")) {
                    System.out.println(map.get("id"));
                    System.out.println(map.get("name"));
                    System.out.println(map.get("payment_type_id"));
                    System.out.println(map.get("status"));
                    System.out.println(map.get("secure_thumbnail"));
                    System.out.println(map.get("thumbnail"));
                    System.out.println(map.get("deferred_capture"));

                    List listsettings = (List) map.get("settings");

                    // Forma uno
                    JSONArray jsonarray = new JSONArray(listsettings);
                    // En el objeto jsonarray tengo la seccion de settings // pero nose como leerlo para obtener los demas valores

                    // Forma dos
                    List<Map<String, Object>> listsettings = (List<Map<String, Object>>) map.get("settings");

                    for (Map<String, Object> maps : listsettings) {
                        // Aca puedo obtener todo lo que tiene : card_number,bin,security_code pero no los valores uno por uno que estan dentro de esas secciones validation,lenght etc...
                    }
                    
                    break;
                }
            }