Java 从MvcResult获取json的大小

Java 从MvcResult获取json的大小,java,json,spring,mockmvc,Java,Json,Spring,Mockmvc,我正在测试一个API并从数据库中获取所有数据。我将响应另存为 MvcResult result = mockMvc.perform(..some code..).andReturn(); 我得到一个json作为响应。我想得到json数组的长度。 所以,如果我在DB中有2行,我想得到2作为结果 或者是否有其他方法来计算数据库中存在的行数。如果您想获得json数组长度,这就是方法 1.如果导入org.json.simple.JSONArray,可以使用JSONArray.size 2.如果您导入o

我正在测试一个API并从数据库中获取所有数据。我将响应另存为

MvcResult result = mockMvc.perform(..some code..).andReturn();
我得到一个json作为响应。我想得到json数组的长度。 所以,如果我在DB中有2行,我想得到2作为结果


或者是否有其他方法来计算数据库中存在的行数。

如果您想获得json数组长度,这就是方法

1.如果导入org.json.simple.JSONArray,可以使用JSONArray.size


2.如果您导入org.json.JSONArray,您可以使用JSONArray.length

如果您想要获得json数组长度,这就是方法

1.如果导入org.json.simple.JSONArray,可以使用JSONArray.size

2.如果导入org.json.JSONArray,可以使用JSONArray.length

尝试:

String content = result.getResponse().getContentAsString();
然后试试这个

试试:

String content = result.getResponse().getContentAsString();

然后试试这个

因为您使用的是MockMvc而不是andReturn,所以您可以使用JSONPath支持,如:

  mvc.perform( MockMvcRequestBuilders
  .get("/resource")
  .accept(MediaType.APPLICATION_JSON))
  .andExpect(status().isOk())
  .andExpect(MockMvcResultMatchers.jsonPath("$.length").value(2))

由于您使用的是MockMvc而不是andReturn,因此可以使用JSONPath支持,如:

  mvc.perform( MockMvcRequestBuilders
  .get("/resource")
  .accept(MediaType.APPLICATION_JSON))
  .andExpect(status().isOk())
  .andExpect(MockMvcResultMatchers.jsonPath("$.length").value(2))

假设你的回答是这样的:

{
  result : [
     {
       "field1": "a",
       "field2": "b"
     },
     {
       "field1": "c",
       "field2": "d"
     }
  ]
}
mvc.perform(MockMvcRequestBuilders
.get("/resource")
.accept(MediaType.APPLICATION_JSON))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.result.length()").value(2))
在本例中,您将使用MockMvc编写如下断言:

{
  result : [
     {
       "field1": "a",
       "field2": "b"
     },
     {
       "field1": "c",
       "field2": "d"
     }
  ]
}
mvc.perform(MockMvcRequestBuilders
.get("/resource")
.accept(MediaType.APPLICATION_JSON))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.result.length()").value(2))

假设你的回答是这样的:

{
  result : [
     {
       "field1": "a",
       "field2": "b"
     },
     {
       "field1": "c",
       "field2": "d"
     }
  ]
}
mvc.perform(MockMvcRequestBuilders
.get("/resource")
.accept(MediaType.APPLICATION_JSON))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.result.length()").value(2))
在本例中,您将使用MockMvc编写如下断言:

{
  result : [
     {
       "field1": "a",
       "field2": "b"
     },
     {
       "field1": "c",
       "field2": "d"
     }
  ]
}
mvc.perform(MockMvcRequestBuilders
.get("/resource")
.accept(MediaType.APPLICATION_JSON))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.result.length()").value(2))

通常多行的响应将是一个数组,如[{row1},{row2},…]。因此,您可以简单地使用array.length属性。@Narendhran,我有一个数组,但我没有看到在MvcResult方法中转换为数组或获取长度数组长度…有很多第三方库可以将json字符串转换为对象,一些著名的库是Jackson,GSONU通常多行的响应将是一个数组,比如[{row1},{row2},…]。因此,您可以简单地使用array.length属性。@Narendhran,我有一个数组,但我在MvcResult方法中看不到转换为数组或获取长度数组长度的方法……有很多第三方库可以将json字符串转换为对象,一些著名的库是Jackson,gson为什么不使用jsonpath的内置支持而不是添加新的依赖项?为什么不使用jsonpath的内置支持而不是添加新的依赖项?