10.jmeter jsr223 javascript 深度比对json object
function sortJSON(data, key, way) {
//log.info(" " + key + " ------------------- " + typeof(key));
return data.sort(function(a, b) {
var x = a[key]; var y = b[key];
if (way === '' ) { return ((x < y) ? - : ((x > y) ? : )); }
if (way === '') { return ((x > y) ? - : ((x < y) ? : )); }
});
}
function isArray(what) {
return Object.prototype.toString.call(what) === '[object Array]';
}
var deepequals = function ( x, y ) {
if ( x === y ) return true;
// if both x and y are null or undefined and exactly the same
if ( ! ( x instanceof Object ) || ! ( y instanceof Object ) ) return false;
// if they are not strictly equal, they both need to be Objects
if ( x.constructor !== y.constructor ) return false;
// they must have the exact same prototype chain, the closest we can do is
// test there constructor.
// log.info("1111111111111111111111 "+ typeof("payMethod") + "" + Object.keys(x)[0] + "" + typeof(Object.keys(x)[0]));
var sortkey2 = "payMethod";
if(isArray(x) && x.length > && typeof x[] == 'object' && Object.keys(x[])[] === "payMethod" ) {
//log.info(JSON.stringify(x)+" ======== "+ Object.keys(x));
//log.info(JSON.stringify(y)+" ======== "+ Object.keys(y));
sortkey2 = Object.keys(x[])[];
if(isArray(x)) { sortJSON(x,sortkey2, '');}
if(isArray(y)) { sortJSON(y,sortkey2, ''); }
//log.info(JSON.stringify(x)+" ======== "+ Object.keys(x));
//log.info(JSON.stringify(y)+" ======== "+ Object.keys(y));
}
//if(sortkey2 == sortkey) log.info("same string " + sortkey);
// if(isArray(x)) sortJSON(x,'a', '123');
// if(isArray(y)) sortJSON(y,'a', '123');
for ( var p in x ) {
// log.info(p+":"+ JSON.stringify(x[p]) + " ====== " + JSON.stringify(y[p]));
if ( ! x.hasOwnProperty( p ) ) continue;
// other properties were tested using x.constructor === y.constructor
if ( ! y.hasOwnProperty( p ) ) { log.info(JSON.stringify(x)+"\n================属性不一致 ===============\n"+JSON.stringify(y)); return false; }
// allows to compare x[ p ] and y[ p ] when set to undefined
if ( x[ p ] === y[ p ] ) continue;
// if they have the same strict value or identity then they are equal
if ( typeof( x[ p ] ) !== "object" ) { log.info(JSON.stringify(x)+"\n================值不一致===============\n"+JSON.stringify(y)); return false; };
// Numbers, Strings, Functions, Booleans must be strictly equal
if ( ! deepequals( x[ p ], y[ p ] ) ) return false;
// Objects and Arrays must be tested recursively
}
for ( p in y ) {
if ( y.hasOwnProperty( p ) && ! x.hasOwnProperty( p ) ) { log.info(JSON.stringify(x)+"\n================反向检查属性不一致===============\n"+JSON.stringify(y)); return false; };
// allows x[ p ] to be set to undefined
}
return true;
}
//Object.prototype.deepEquals = deepEquals;
var beforeObject = JSON.parse(vars.get("83response"));
var afterObject = JSON.parse(prev.getResponseDataAsString());
if(deepequals( beforeObject, afterObject )){
log.info("deep equals");
}
else{
// log.info(deepequals(testa,testb));
AssertionResult.setFailure(true);
AssertionResult.setFailureMessage("content not deep equal ");
AssertionResult.setResultForFailure("content not deep equal");
}
10.jmeter jsr223 javascript 深度比对json object的更多相关文章
- javascript深度克隆与javascript的继承实现
1.javascript深度克隆: //注意这里的对象包括object和array function cloneObject(obj){ var o = obj.constructor === Arr ...
- JavaScript(8)——JSON
JSON 啊呀呀,终于写到了JSON了.莫名的开心,虽然还是被说进度慢,不过,我不管,我就是开心.恩,好好学习,好好加油.(这是一段毫无逻辑的话,我也不知道说啥了) JSON是JavaScript的一 ...
- Javascript学习之:JSON
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它是基于ECMAScript的一个子集,采用完全独立于语言的文本格式.这些特性使JSON成为理想的数据交换 ...
- JavaScript:基础扩展(1)——JSON
JavaScript:扩展知识(1)——JSON 理解: 关于 JSON,最重要的是要理解它是一种数据格式,不是一种编程语言.虽然具有相同的语法形式,但 JSON 并不从属于 JavaScript.而 ...
- 为新项目添彩的 10+ 超有用 JavaScript 库
快速使用Romanysoft LAB的技术实现 HTML 开发Mac OS App,并销售到苹果应用商店中. <HTML开发Mac OS App 视频教程> 土豆网同步更新:http: ...
- [转]javascript eval函数解析json数据时为什加上圆括号eval("("+data+")")
javascript eval函数解析json数据时为什么 加上圆括号?为什么要 eval这里要添加 “("("+data+")");//”呢? 原因在于: ...
- JavaScript标准库之——JSON
JSON 对象包含了两个方法,一是解析 JavaScript Object Notation (JSON),二是将值转换为 JSON.这个对象本身不能被调用或者作为构造函数,除了它的这两个方法属性外 ...
- JavaScript Patterns 3.5 JSON
JSON: JavaScript Object Notation {"name": "value", "some": [1, 2, 3]} ...
- JavaScript的Eval与JSON.parse的区别
JavaScript的Eval与JSON.parse的区别 json的定义以及用法: JSON(JavaScript Object Notation)是一种轻量级的数据格式,采用完全独立于语言的文本格 ...
随机推荐
- 可视化操作,实现横向柱形echart图 无边框
图片的实现: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <ti ...
- indexDB的用法
本文转自http://www.ruanyifeng.com/blog/2018/07/indexeddb.html,为了方便个人整理学习笔记所用 一.概述 随着浏览器的功能不断增强,越来越多的网站开始 ...
- iOS开发笔记1
1.在堆上模拟函数调用栈 背景: 在看算法书时候, 很多地方提到要谨防递归的栈溢出问题. 分析: 递归调用时候, 有可能出现非常深的函数调用. 对于每次的函数调用, 都需要将函数体内的局部变量保存在栈 ...
- 将两个列表合并为字典_其中一个列表为Key_一个列表为Value
#定义两个列表 list1 = range(0,10) list2 = range(10,20) #合并为字典,调用dict(zip()) dict_name = dict(zip(list1,lis ...
- 浅谈ContextLoaderListener及其上下文与DispatcherServlet的区别
一般在使用SpingMVC开发的项目中,一般都会在web.xml文件中配置ContextLoaderListener监听器,如下: <listener> <listener-clas ...
- 2019届校招前端面试题整理——HTML、CSS篇
前言 2019届校招陆陆续续开始了,整理了一些高频的面试题. HTML部分 1. 什么是<!DOCTYPE>? DOCTYPE是html5标准网页声明,且必须声明在HTML文档的第一行.来 ...
- [BZOJ2600] ricehub
问题描述 乡间有一条笔直而长的路称为"米道".沿着这条米道上 R 块稻田,每块稻田的坐标均为一个 1 到 L 之间(含 1 和 L)的整数.这些稻田按照坐标以不减的顺序给出,即对于 ...
- 【leetcode】1053. Previous Permutation With One Swap
题目如下: Given an array A of positive integers (not necessarily distinct), return the lexicographically ...
- vuex的mapState方法来获取vuex的state对象中属性
有两种写法 1.首先在组件中引入vuex的mapState方法: 首先在组件中引入vuex的mapState方法: import { mapState } from 'vuex' 然后在compute ...
- AndroidManifest.xml里加入不同package的component (Activity、Service里android:name里指定的值一般为句号加类名),可以通过指定完全类名(包名+类名)来解决
我们都知道对于多个Activity如果在同一个包中,在Mainfest中可以这样注册 <span style="font-size: small;"><?xml ...