空手道 API json 响应 - 如何验证 API 响应中有时出现有时不出现的密钥的存在

Karate API json response - How to validate the presence of a key which sometimes come and sometimes not in the API response

我需要帮助来验证响应中是否存在一个密钥。 API 的响应看起来像 -

"persons": [
        {
            "id": "27",
            "source": {
                "personId": 281,
                "emailAddress": "abc@abc.com",
                "firstName": "Steve"
            }
        },
        {
            "id": "28", 
            "source": {
                "personId": 353,
                "emailAddress": "abcd@abc.com",
                "firstName": "John"
                "LastName" : "Cena"         
            }
        }
    ]
}

我想断言 source.LastName 是否出现,如果出现,那么它应该始终包含一个字符串值。

该解决方案应该是通用的,它应该适用于 30 或 40 人的对象,目前我正在使用空手道版本 0.9.4 并且需要一个解决方案来处理这种情况。

提前致谢!

在架构中 "##string" 验证该字段可以为 null 或字符串。

示例代码:

Feature: Schema validation

    Scenario:
        * def resp =
            """
            {
            "persons": [
                    {
                        "id": "27",
                        "source": {
                            "personId": 281,
                            "emailAddress": "abc@abc.com",
                            "firstName": "Steve"
                        }
                    },
                    {
                        "id": "28", 
                        "source": {
                            "personId": 353,
                            "emailAddress": "abcd@abc.com",
                            "firstName": "John",
                            "LastName" : "Cena"         
                        }
                    }
                ]
            }
            """
        * def schema = 
        """
            {
                "id": "#string",
                "source": {
                    "personId": "#number",
                    "emailAddress": "#string",
                    "firstName": "#string",
                    "LastName": "##string"
                }
            }

        """
        * match each resp.persons == schema