当前位置: 首页 > 知识库问答 >
问题:

JSON路径上没有值

卫志泽
2023-03-14

如何为下面的JSON编写mockMVC测试,该JSON具有String和Array的组合。

{
  "id":1,
  "firstName":"NPA",
  "lastName":"TAS",
  "mobile":"123454321",
  "email":"ABCD@GMAIL.COM",
  "accounts":[
         {
          "id":1,
          "balance":"$1000",
          "custid":"1",
          "accNbr":"12345"
         }
            ]
}

我的代码:

@Test
        public void testJson() throws Exception {
            mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
            mockMvc.perform(get("/acc/1")
            .accept(MediaType.APPLICATION_JSON))
            .andExpect(status().isOk())
            .andExpect(jsonPath("$.accounts.id", Matchers.is(1)))
            .andExpect(jsonPath("$.accounts.balance", Matchers.is("$1000")))
            .andExpect(jsonPath("$.accounts.accNbr", Matchers.is("12345")))
            .andExpect(jsonPath("$.accounts.custid", Matchers.is("1")))
            .andExpect(jsonPath("$.*", Matchers.hasSize(4)));
        }

我有个例外

JSON路径“$.accounts.id”处无值,异常:

应在路径$中找到属性为['accounts']的对象,但找到'net'。米尼德夫。json。杰索纳雷'。根据JsonProvider:'com,这不是json对象。乱穿马路。jsonpath。spi。json。JsonSmartJsonProvider'。

但是,如果我尝试使用$。帐户[0]。我有例外吗

JSON路径“$.accounts[0].id”处没有值,异常:

应在路径$中找到属性为['accounts']的对象,但找到'net'。米尼德夫。json。杰索纳雷'。根据JsonProvider:'com,这不是json对象。乱穿马路。jsonpath。spi。json。JsonSmartJsonProvider'。

共有2个答案

濮阳霄
2023-03-14

正如@glytching和我提到的,有一个数组,它应该与$一起工作。帐户[0]。id

如果您仍然遇到问题,我将尝试在您的控制台上打印结果:

MvcResult result = mockMvc.perform(MockMvcRequestBuilders
         .get("/acc/1").accept(MediaType.APPLICATION_JSON)).andReturn();

String content = result.getResponse().getContentAsString();
钱选
2023-03-14

accounts属性是一个数组,因此:$。账户id必须使用索引器,例如:$。帐户[0]。id

从文档中:

[<number> (, <number>)]     Array index or indexes

如果您不确定要使用哪个索引,那么您可以过滤JSON并在过滤后的帐户子文档上断言。例如:

    ===================================================================================================================1)]。平衡:返回 1000美元 ================================================================================================================id:返回 1
  • ...等

文档中有更多详细信息,您可以使用JsonPath评估器来处理这个问题。

 类似资料: