[英]How to ignore case in javascript while comparing two APIs response in postman?
我在下面使用 function 来比较两个 API 响应,但有些键具有相同的值,但大小写不同,它报告的差异是不同的。 如何避免这种区分大小写?
var difference = (object, base) => {
function changes(object, base) {
return _.transform(object, function(result, value, key) {
if(!_.isEqual(value, base[key])) {
result[key] = (_.isObject(value) && _.isObject(base[key])) ? changes(value, base[key]) : value;
}
});
}
return changes(object, base);
}
当有任何案例问题时,我希望它不会显示差异。 例如对于下面它不应该返回任何差异并认为它相同
"content": “Data | 8GB
or
"content": “data | 8GB
第一个 API 的响应
[
{
"price": 20,
"planCategory": "Mobile Broadband",
"externalSkuId": “MBB”,
"planHeader": {},
"expiry": "14 days",
"includedData": 8,
"includedDataType": "GB",
"inclusionOption1": "Get 1GB bonus data on every automatic recharge when you opt-in. T&C apply.",
"inclusionHighlight": "8GB",
"inclusionOptions": [
{
"channels": [
"SELF_SERVICE",
"ESTORE"
],
"type": {
"name": "DATA"
},
"content": "data | 8GB"
},
{
"channels": [
"SELF_SERVICE"
],
"type": {
"name": "OTHER"
},
"content": "expiry|14 days"
}
]
}
]
第二次 API 响应
[
{
"price": 20,
"planCategory": "Mobile Broadband",
"externalSkuId": “MBB”,
"planHeader": {},
"expiry": "13 days",
"includedData": 8,
"includedDataType": "GB",
"inclusionOption1": "Get 2GB bonus data on every automatic recharge.",
"inclusionHighlight": "8GB",
"inclusionOptions": [
{
"channels": [
"SELF_SERVICE",
"ESTORE"
],
"type": {
"name": "DATA"
},
"content": “Data | 8GB"
},
{
"channels": [
"SELF_SERVICE"
],
"type": {
"name": "OTHER"
},
"content": “Expiry|14 days"
}
]
}
]
我如何称呼差异 function
//First API response body
var jsonObject1 = pm.globals.get("responseBodyAPI1”);
//Second API response body
var jsonObject2 = JSON.parse(responseBody);
//Call the difference function stored in global variable and pass response body of both APIs in that
var diff = eval(pm.globals.get("difference"))(jsonObject1, jsonObject2);
//Log the difference of both APIs on Postman console
console.log(diff);
差异 Function Postman 控制台中的结果也显示区分大小写的问题我只是希望它返回空 object 在这种情况下,因为到期或到期和数据或数据是相同的
var jsonObject1 = pm.globals.get("response");
const lowserCase = (obj) => {
Object.keys(obj).forEach((key) => {
if (key == "content"){
key = key.toLowerCase();
}
});
};
jsonObject1.forEach(lowserCase);
console.log(jsonObject1)
上面的代码不起作用
您可以将响应作为字符串并比较每个的小写版本:
function isSame(res1, res2) { return JSON.stringify(res1).toLowerCase() == JSON.stringify(res2).toLowerCase() } console.log( isSame({"DATA": "X"}, {"data": "x"}) )
使用具有sensitivity: 'base'
,这意味着等效字母具有相同的权重。 比toLower
高效得多。 这是一个非常有效的 object 比较器,它不需要 toLower 或 JSON.stringify 并在属性为字符串时忽略大小写。
const compareStr = new Intl.Collator(undefined, { sensitivity: 'base' }).compare; const compare = (obj1, obj2) => Array.isArray(obj1)? Array.isArray(obj2) && obj1.length === obj2.length && obj1.every((item, index) => compare(item, obj2[index])): obj1 instanceof Date? obj2 instanceof Date && obj1.getDate() === obj2.getDate(): obj1 && typeof obj1 === 'object'? obj2 && typeof obj2 === 'object' && Object.getOwnPropertyNames(obj1).length === Object.getOwnPropertyNames(obj2).length && Object.getOwnPropertyNames(obj1).every(prop => compare(obj1[prop], obj2[prop])): typeof obj1 === 'string' && typeof obj2 === 'string'? compareStr(obj1, obj2) === 0: obj1 === obj2; console.log(compare({ prop: 'a' }, { prop: 'A' })); console.log(compare(['b'], ['B'])); console.log(compare('a', 'A')); console.log(compare('B', 'b')); console.log(compare('B', 'a')); console.log(compare('Mismatched case', 'MisMatched Case'));
使用下面的仅将 pipe 符号左侧的“内容”转换为小写。
//Change to lower case from left side of | sign for content
jsonObject1.forEach(function(value, index) {
if (value.inclusionOptions) {
value.inclusionOptions.forEach(function(value2, index2) {
var tokens = value2.content.split('|');
value2.content = tokens[0].toLowerCase() + "|" + tokens[1];
});
}
});
console.log(jsonObject1);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.