如何替换存储在 JSON 文件中的 JSON 值并在 Rest Assured 测试中使用它

How to replace a JSON value stored in a JSON file and use that in a Rest Assured test

我在 JSON 中有一组输入数据文件,我正在尝试替换 JSON 文件中存在的值并使用该值在 post 中执行请求放心

JSON 文件有

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

下面的jsonbody是上面JSON文件的String

这是失败的代码:

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.

我只需要将 241 替换为 251。有更简单的方法吗?

一般来说,如果我们有一个预定义的 JSON 正文文件,并且如果我们想要替换正文中的某些值并在我们的 POST 调用中使用它 RestAssured,有没有更简单的方法怎么做?

问题是 - 字段 item_refprice 并不像您认为的那样在 JSON 对象中。 它们位于 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}]}

此外,您可以创建一个 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"));