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

在JSON部分使用JSONAssert和RESTAsure

姚高爽
2023-03-14

我能够使用 RESTA 保证从服务中检索 JSON。

我想使用JSONPath功能提取JSON,然后使用JSONAssert进行比较。

下面是我的示例:

@Test
public void doAPITestExample() throws JSONException {
    // retrieve JSON from service
    Response response = RestAssured.given().get("http://localhost:8081/mockservice");
    response.then().assertThat().statusCode(200);

    String body = response.getBody().asString();
    System.out.println("Body:" + body);
    /*
        {"datetime": "2018-06-21 17:48:07.488384", "data": [{"foo": "bar"}, {"test": "this is test data"}]}
    */

    // able to compare entire body with JSONAssert, strict=false
    Object data = response.then().extract().path("data");
    System.out.println("Response data:");
    System.out.println(data.getClass()); // class java.util.ArrayList
    System.out.println(data.toString());

    // JSONAssert data with strict=false
    String expectedJSON = "{\"data\":[{\"foo\": \"bar\"}, {\"test\": \"this is test data\"}]}";
    JSONAssert.assertEquals(expectedJSON, response.getBody().asString(), false);

    // How do I extract JSON with JSONPath, use JSONAssert together?
}

如何让JSONPath返回一个JSONObject,可以被JSONAsser使用?

在代码示例中:

Object data = response.then().extract().path("data");

这将返回一个 java.util.数组列表。如何将其与 JSON 资产一起使用,以便与预期的 JSON 进行比较?

如果我执行data.toString(),这将返回一个无法解析的字符串,因为缺少对带空格字符串的字符串值的引号处理:

String dataString = response.then().extract().path("data").toString();
JSONArray dataArray = (JSONArray) JSONParser.parseJSON(dataString);

结果:

org.json.JSONException: Unterminated object at character 24 of [{foo=bar}, {test=this is test data}]

是否可以仅从JSON中提取data属性并在该部分上针对JSON Schema运行它?

注意:返回的整个JSON相当大。我只想验证它的data属性。

执行JSON模式验证的示例仅从JSON中查找data属性是什么?

谢谢;

共有1个答案

钱焕
2023-03-14

您可以在响应对象中使用jsonPath方法。

例子:

// this will return bar as per your example response.
String foo = response.jsonPath ().getString ("data[0].foo"); 

有关Json路径的更多信息,请查看此处。

 类似资料:
  • 问题内容: 我有以下json: 基于的更改。 知道这一点,有没有办法使该字段保持字符串?这个想法是使用调用传递的正确处理程序,然后在其中使用正确的struct 解析字符串。 例: 先感谢您。 问题答案: 使用json.RawMessage获取字段的原始JSON文本: 像这样使用它: 在操场上跑。

  • 我需要在Spring MVC中创建一个可以处理JSON和Multipart Form请求的方法。 这是我的方法的签名: ImageDTO类如下所示: 所以这个场景是我需要支持两个场景:1。从表单向上加载图像,其中内容类型为多部分表单(所有DTO成员均不为null)2。使用JSON上传图像,仅使用imageUrl。在本例中,请求正文如下所示: 当前的实现很好地处理了多部分请求,但在发送JSON时,I

  • 我有一个非常简单的mysql记录如下: 这是它的冬眠实体;没什么特别的 为了方便起见,我使用Gson从前端传入的json字符串解析实体 记录的json字符串如下所示: 然后将从json字符串中解析userEntity: 我可以使用和。 如果每个字段都包含在json字符串中,那么事情看起来就像预期的那样。但当某些字段(如被省略时: 这表明我应该进行部分更新,并保留省略的字段不进行修改,但出现了问题。

  • 我想用Spring MVC发布一个包含一些JSON数据的文件。所以我开发了一个rest服务作为

  • 我想用这个JSON正文(包含图片)和改造做一个PUT请求。我在Android下使用它: 有线索吗?

  • 问题内容: 我正在构建RESTful API,并希望为开发人员提供选择以在JSON响应中返回哪些字段的选项。 这篇博客文章显示了几个API(Google,Facebook,LinkedIn)如何允许开发人员自定义响应的示例。这称为部分响应。 一个示例可能看起来像这样: 在上面的示例中,API应该返回用户“ 123”的userId,fullName和title字段。 我正在寻找有关如何在我的REST