如何在jsonPath中转义[]

时间:2015-11-01 11:54:43

标签: spring-test jsonpath

如何在JSONPath匹配器中转义方括号?

.andExpect(jsonPath("$.fieldErrors.addresses[0].contactAddress1", Matchers.any(String.class)))

即使JSON存在,

也不匹配,我认为这是因为方括号。

"{\"errors\":[],\"fieldErrors\":{\"adminName\":\"Admin Name is a required field\",\"addresses[0].contactCompany\":\"Company is a required field\",\"addresses[0].contactAddress1\":\"Address is a required field\",\"addresses[0].contactPhoneNumber\":\"Phone Number cannot exceed 25 characters\"},\"uiMessageClass\":null,\"uiMessage\":null,\"redirectUrl\":null,\"object\":null}"

有没有办法摆脱括号?

1 个答案:

答案 0 :(得分:0)

addresses不包含名为.andExpect(jsonPath("$.fieldErrors['addresses[0].contactAddress1']", Matchers.any(String.class))) 的属性,该属性是数组或列表。因此,您使用了错误的语法。

您是否尝试过像这样简单引用该属性的名称?

@Test
public void test() {
    String input = "{\"errors\":[],\"fieldErrors\":{\"labels[en]\":\"Label is a required field\",\"externalIdentifier\":\"Identifier is a required field\"},\"uiMessageClass\":null,\"uiMessage\":null,\"redire‌​ctUrl\":null,\"objec‌​t\":null}";
    JsonPathExpectationsHelper jsonPath = new JsonPathExpectationsHelper("$.fieldErrors['labels[en]']");
    jsonPath.exists(input);
    jsonPath.assertValue(input, Matchers.any(String.class));
    jsonPath.assertValue(input, "Label is a required field");
}

有关详细信息,请参阅官方JsonPath文档。

我还尝试了您在评论中讨论的其他失败测试,​​但我无法重现该问题。例如,以下测试对我来说没问题:

{{1}}

此致

萨姆