我有一组使用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调用中使用它们,那么还有什么更简单的方法吗?
答案 0 :(得分:1)
问题是-字段item_ref
和price
不在您所认为的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"));