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

使用jsonpath计算成员数?

谭玉泽
2023-03-14

是否可以使用JsonPath计算成员数?

使用spring mvc测试,我正在测试一个生成

{"foo": "oof", "bar": "rab"}

具有

standaloneSetup(new FooController(fooService)).build()
            .perform(get("/something").accept(MediaType.APPLICATION_JSON)).andExpect(status().isOk())
            .andExpect(jsonPath("$.foo").value("oof"))
            .andExpect(jsonPath("$.bar").value("rab"));

我想确保生成的json中没有其他成员。希望通过使用jsonPath计算它们。可能吗?也欢迎其他解决方案。

共有3个答案

夏锐藻
2023-03-14

我们可以使用JsonPath函数,如size()length(),如下所示:

@Test
public void givenJson_whenGetLengthWithJsonPath_thenGetLength() {
    String jsonString = "{'username':'jhon.user','email':'jhon@company.com','age':'28'}";

    int length = JsonPath
        .parse(jsonString)
        .read("$.length()");

    assertThat(length).isEqualTo(3);
}

或者简单地解析net。米尼德夫。json。JSONObject并获取大小:

@Test
public void givenJson_whenParseObject_thenGetSize() {
    String jsonString = "{'username':'jhon.user','email':'jhon@company.com','age':'28'}";

    JSONObject jsonObject = (JSONObject) JSONValue.parse(jsonString);

    assertThat(jsonObject)
        .size()
        .isEqualTo(3);
}

事实上,第二种方法似乎比第一种方法表现得更好。我进行了JMH性能测试,结果如下:

| Benchmark                                       | Mode  | Cnt | Score       | Error        | Units |
|-------------------------------------------------|-------|-----|-------------|--------------|-------|
| JsonPathBenchmark.benchmarkJSONObjectParse      | thrpt | 5   | 3241471.044 | ±1718855.506 | ops/s |
| JsonPathBenchmark.benchmarkJsonPathObjectLength | thrpt | 5   | 1680492.243 | ±132492.697  | ops/s |

示例代码可以在这里找到。

南门峰
2023-03-14

您还可以使用jsonpath中的方法,因此

mockMvc.perform(get(API_URL))
   .andExpect(jsonPath("$.*", hasSize(2)));

你能行

mockMvc.perform(get(API_URL))
   .andExpect(jsonPath("$.length()", is(2)));
苏彭薄
2023-03-14

要测试数组的大小:jsonPath(“$”,hasSize(4))

要计算对象的成员,请执行以下操作:jsonPath($.*),hasSize(4))

也就是说,要测试API是否返回一个包含4项的数组:

接受值:[1,2,3,4]

mockMvc.perform(get(API_URL))
       .andExpect(jsonPath("$", hasSize(4)));

要测试该API,返回一个包含2个成员的对象:

接受值:{foo:“oof”,“bar:“rab”}

mockMvc.perform(get(API_URL))
       .andExpect(jsonPath("$.*", hasSize(2)));

我使用的是Hamcrest 1.3版和Spring Test 3.2.5。释放

hasSize(int)javadoc

注意:您需要包含hamcrest库依赖关系和导入静态org.hamcrest.匹配器。

 类似资料:
  • 问题内容: 是否可以使用JsonPath计算成员数量? 使用Spring MVC Test我正在测试生成的控制器 与 我想确保生成的json中没有其他成员。希望通过使用jsonPath计数它们。可能吗?也欢迎其他解决方案。 问题答案: 要测试 数组的 大小: 要计算 对象的 成员: 即测试API返回4个项目的 数组 : 接受值: 测试API是否返回包含2个成员的 对象 : 接受值: 我正在使用Ha

  • 我的工作对象是: SpringMVC测试 汉克雷斯特 JsonPath 我对服务器的响应有以下几点看法: 以下工作符合预期(有效): 我需要测试是1。确认存在1项。它再次确认以下内容: 我试过: 观察和

  • 在JMeter中,我想检查从服务器接收到的JSON数组中的对象数。 例如,在一个特定的请求中,我期望一个包含5个对象的数组。 [{...},{...},{...},{...},{...}] 读完这个:使用jsonpath?计数成员后,我尝试使用以下JSON路径断言: JSON路径:$ 然而,这似乎没有正常工作。当我真的在数组中收到5个对象时,响应断言说它不匹配。 我做错了什么?或者我还能怎么做?

  • 本文向大家介绍使用C ++中的静态成员函数计算对象数,包括了使用C ++中的静态成员函数计算对象数的使用技巧和注意事项,需要的朋友参考一下 在这里,我们将看到如何计算使用某些静态成员函数从特定类创建的对象的数量。静态成员是类属性,而不是对象属性。对于单个类,静态成员只有一个实例。没有为每个对象创建新成员。 在这个问题中,我们使用一个静态计数器变量来跟踪对象的数量,然后静态成员将在那里显示计数值。

  • 本文向大家介绍使用C ++程序中的静态成员函数计算对象数,包括了使用C ++程序中的静态成员函数计算对象数的使用技巧和注意事项,需要的朋友参考一下 此处的目标是计算使用静态成员函数创建的类的对象数。 静态数据成员通常由该类的所有对象共享。如果未给出任何值,则静态数据成员始终以0初始化。 静态成员函数只能使用该类的静态数据成员。 我们在这里使用类学生。我们将声明一个静态数据成员计数,该计数将存储对象

  • 员函数调整客户的银行借贷(例如 BanLAccount 类的 private 数据成员)。 类通常提供 public 成员函数,让类的客户设置(写入)或读取(取得) private 数据成员的值。这些函数通常称为get和set。更具体地说,设置数据成员interestRate的成员函数通常称为setInterestRate,读取数据成员IntersetRate的值通常称为 getInterestR