如何从 RequestSpecification/FilterableRequestSpecification 正文中删除属性?
How to remove an attribute from RequestSpecification/FilterableRequestSpecification body?
亲爱的,
我正在创建一个简单的方法,该方法将采用 String 参数,该参数将是指向 JSON 中 attribute/s 的路径或其他类型的“指针”,并且此方法将删除那些 attribute/s.
我的问题是我可以使用 JsonPath 找到那些 attribute/s 的值,但是我无法在放心(或其他库)中找到可以通过给定路径 remove/delete 属性的方法。
JSON 之前已经添加了,所以我需要将他从 RequestSpecification 或 FilterableRequestSpecification 对象 ex.
中拉出来
RequestSpecification rs = *objFromContext*;
FilterableRequestSpecification frs= (FilterableRequestSpecification) rs;
frs.getBody();
我尝试使用 JSONObject class 和 remove() 但它不适用于复杂的 JSONs.
给出的例子JSON
{
"created": "string",
"updated": "string",
"items": [
{
"code": "TEST",
"nested": {
"code": "test",
"name": "name",
"other": [
{
"code": "TEST",
"name": "myName",
"quantity": 1
}
]
},
"itemsProperties": [
{
"code": "value1",
"name": "name",
"value": 123
}
]
},
{
"code": "TEST",
"nested": {
"code": "test",
"name": "name",
"other": [
{
"code": "TEST",
"name": "myName",
"quantity": 1
}
]
},
"itemsProperties": [
{
"code": "value2",
"name": "name",
"value": 123
}
]
}
],
"timer": {
"startDate": "2015-01-01",
"endDate": "2021-01-02"
},
"id": "myId"
}
使用JsonPath jp = JsonPath.from(httpRequest.getBody().toString());
然后 jp.get(items.itemsproperties.code)
我可以找到 value1 和 value2。
我卡在了这一点:如何从发送的正文中删除那些属性?
我知道我可以将 body 转换为 JSONObject,然后在 getJSONArray 和 GetJSONOBject 之间进行字段转换后转到字段并删除这些字段,但我想让这个方法更多更普遍。
这可能吗?
如果您想在 Rest-Assured JsonPath 中操作 json,那么答案是否定的。您不能那样做。 JsonPath 帮助您从 json 中提取值,仅此而已。
您必须使用不同的库来删除键值对。
例如:使用JsonPath Jayway
DocumentContext parse = JsonPath.parse(body);
parse.delete("$..itemsProperties..code");
System.out.println(parse.jsonString());
亲爱的,
我正在创建一个简单的方法,该方法将采用 String 参数,该参数将是指向 JSON 中 attribute/s 的路径或其他类型的“指针”,并且此方法将删除那些 attribute/s.
我的问题是我可以使用 JsonPath 找到那些 attribute/s 的值,但是我无法在放心(或其他库)中找到可以通过给定路径 remove/delete 属性的方法。
JSON 之前已经添加了,所以我需要将他从 RequestSpecification 或 FilterableRequestSpecification 对象 ex.
RequestSpecification rs = *objFromContext*;
FilterableRequestSpecification frs= (FilterableRequestSpecification) rs;
frs.getBody();
我尝试使用 JSONObject class 和 remove() 但它不适用于复杂的 JSONs.
给出的例子JSON
{
"created": "string",
"updated": "string",
"items": [
{
"code": "TEST",
"nested": {
"code": "test",
"name": "name",
"other": [
{
"code": "TEST",
"name": "myName",
"quantity": 1
}
]
},
"itemsProperties": [
{
"code": "value1",
"name": "name",
"value": 123
}
]
},
{
"code": "TEST",
"nested": {
"code": "test",
"name": "name",
"other": [
{
"code": "TEST",
"name": "myName",
"quantity": 1
}
]
},
"itemsProperties": [
{
"code": "value2",
"name": "name",
"value": 123
}
]
}
],
"timer": {
"startDate": "2015-01-01",
"endDate": "2021-01-02"
},
"id": "myId"
}
使用JsonPath jp = JsonPath.from(httpRequest.getBody().toString());
然后 jp.get(items.itemsproperties.code)
我可以找到 value1 和 value2。
我卡在了这一点:如何从发送的正文中删除那些属性?
我知道我可以将 body 转换为 JSONObject,然后在 getJSONArray 和 GetJSONOBject 之间进行字段转换后转到字段并删除这些字段,但我想让这个方法更多更普遍。
这可能吗?
如果您想在 Rest-Assured JsonPath 中操作 json,那么答案是否定的。您不能那样做。 JsonPath 帮助您从 json 中提取值,仅此而已。
您必须使用不同的库来删除键值对。
例如:使用JsonPath Jayway
DocumentContext parse = JsonPath.parse(body);
parse.delete("$..itemsProperties..code");
System.out.println(parse.jsonString());