如何替换存储在JSON文件中的JSON值,以及如何在Rest Assured测试中使用该值

时间:2019-07-09 15:48:42

标签: json rest-assured rest-assured-jsonpath

我有一组使用JSON的输入数据文件,我正在尝试替换JSON文件中存在的值,并使用该值在restAssured中进行发布请求

JSON文件具有

{
    "items": [
        {
            "item_ref": 241,
            "price": 100
        }
    ]
}

下面的jsonbody是上述JSON文件的字符串

这是失败的代码:

JSONObject jObject  = new JSONObject(jsonbody);
        jObject.remove("item_ref");
        jObject.put("item_ref","251");
        System.out.println(jObject);

这就是我得到的:

{"item_ref":"251","items":[{"item_ref":241,"price":100}]}

我想要的是{"items":[{"item_ref":251,"price":100}]}

我也尝试过

JSONObject jObject  = new JSONObject(jsonbody);
        jObject.getJSONObject("items").remove("item_ref");
        jObject.getJSONObject("items").put("item_ref","251");
        System

但是它说JSONObject [“ items”]不是JSONObject。

我所需要做的就是用251替换241。有没有更简单的方法?

通常,如果我们有一个预定义的JSON主体文件,并且想要替换主体中的某些值并在RestAssured的POST调用中使用它们,那么还有什么更简单的方法吗?

2 个答案:

答案 0 :(得分:1)

问题是-字段item_refprice不在您所认为的JSON Object中。 它们位于包含JSON对象的JSON数组中。为了修改该值,您必须获取数组的元素,然后执行非常相似的代码。

检查一下:

JSONObject jObject  = new JSONObject(jsonbody);
JSONArray array = jObject.getJSONArray("items");
JSONObject itemObject = (JSONObject) array.get(0); //here we get first JSON Object in the JSON Array
itemObject.remove("item_ref");
itemObject.put("item_ref", 251);

输出为:

{"items":[{"item_ref":251,"price":100}]}

答案 1 :(得分:0)

此外,您还可以创建一个Hashmap:

    HashMap<String,String> map = new HashMap<>();
    map.put("key", "value");

    RestAssured.baseURI = BASE_URL;
    RequestSpecification request = RestAssured.given();
    request.auth().preemptive().basic("Username", "Password").body(map).put("url");
    System.out.println("The value of the field after change is: "  + map.get("key"));