通过JSON替换的方式实现app返回数据MOCK
来源:互联网 发布:科多大数据上海 编辑:程序博客网 时间:2024/06/10 19:28
本地MOCK
背景
在app的测试时,经常需要对返回的字段做替换。通常我们采用的方案是通过fiddler/charles抓包,然后替换请求。但是,由于修改了网络库,无法再继续抓包,所以产生了这种需求:对收到的请求进行替换。
方案
在收取请求后,在解析JSONObject 之前,进行数据的修改。修改完成后再进行正常的数据处理。
方案评估
从实现的简单程度上,直接实现是最省事的。so,先做。。。
数据替换
定义规则:
key = value 表示将某个key的值替换成value.其中key可能是个简单的key,也可能是个JSONObject/JSONArray key = DEL 表示删除某个key key = ADD(value) 表示在key的对象内部增加某个object.
具体实现 替换和删除
添加内容还没做,用key=value就能实现,不做了
public class SingleRule { public String key; public String value; public int status = -1;//0, change,1 del,2,add; -1 means not match Pattern change = Pattern.compile("^[\\s]*([^=]+)=[\\s]*((?!DEL|ADD)[^\\s]+)[\\s]*"); Pattern del = Pattern.compile("^[\\s]*([^=]+)=[\\s]*DEL[\\s]*"); public SingleRule(String schema) { Matcher matcherChange = change.matcher(schema); Matcher matcherDel = del.matcher(schema); if(matcherChange.matches()){ key = matcherChange.group(1).trim(); value = matcherChange.group(2).trim(); status = 0; } if(matcherDel.matches()){ key = matcherDel.group(1).trim(); status = 1; } } public static String changeString(String orig,String targetKey,String value,boolean change){ String desc = orig; try { JSONObject obj = JSON.parseObject(orig); desc = getValue(obj, "", targetKey, value, change).toString(); } catch(Exception e){ e.printStackTrace(); } return desc; } public static Object getValue(Object objValue,String curKey,String targetKey,String value,boolean change) { if(objValue instanceof JSONArray){ if(curKey.equals(targetKey)){ if(change) { return JSON.parseArray(value); } else return null; } int size = ((List<Object>)objValue).size(); for(int i=size-1;i>=0;i--){ Object obj = ((List<Object>)objValue).get(i); Object resp = getValue(obj, curKey, targetKey, value, change); if(resp == null) ((List<Object>)objValue).remove(i); else ((List<Object>)objValue).set(i, resp); } } else if(objValue instanceof JSONObject) { if(curKey.equals(targetKey)){ if(change) { return JSON.parseObject(value); } else return null; } Set<String> keys = new HashSet<String>(((JSONObject)objValue).keySet()); for(String key: keys){ Object obj = ((Map)objValue).get(key); Object resp = getValue(obj, key, targetKey, value, change); ((Map)objValue).remove(key); if(resp != null) { ((Map) objValue).put(key,resp); } } } else { if(curKey.equals(targetKey)){ if(change) { return value; } else return null; } } return objValue; } @Override public String toString() { return "SingleRule{" + "key='" + key + '\'' + ", value='" + value + '\'' + ", status=" + status + '}'; } static String PATH = "/Users/army/Documents/tmall/tem.txt"; public static void main( String[] args ) throws Exception { String str = readfile(PATH); System.out.println("orig:" + str); SingleRule rule = new SingleRule("suggestList=[\"a]"); System.out.println(rule); String newstr =SingleRule.changeString(str,rule.key,rule.value,true); System.out.println("r:" + newstr); } public static String readfile(String path) throws IOException { BufferedReader br = new BufferedReader(new FileReader(path)); String data = br.readLine();//一次读入一行,直到读入null为文件结束 StringBuffer strBuf = new StringBuffer(); while( data!=null){ strBuf.append(data); data = br.readLine(); //接着读下一行 } return strBuf.toString(); }}
0 0
- 通过JSON替换的方式实现app返回数据MOCK
- mock简单的json返回
- SpringMVC返回json数据的配置方式
- SpringMVC返回json数据的配置方式
- SpringMVC返回json数据的配置方式
- springMVC返回json数据的方式
- 客户端Mock服务端的JSON数据
- 通过gradle生成SpringMVC实现RESTful返回JSON格式数据
- Axios通过mock模拟数据进行通信的几种方式
- struts2下通过ajax返回json的两种方式
- 使用spring4.0和4.1注解返回json格式的数据的两种实现方式
- 不可不知的Mock数据方式
- Extjs与Struts2交互,返回JSON数据的两种实现方式
- Extjs与Struts2交互,返回JSON数据的两种实现方式
- Java 通过HttpURLConnection Post方式提交json,并从服务端返回json数据
- Java 通过HttpClient Post方式提交json,并从服务端返回json数据
- Java 通过HttpURLConnection Post方式提交json,并从服务端返回json数据
- Java 通过HttpURLConnection Post方式提交json,并从服务端返回json数据
- 浅谈函数的可变参数
- Android添加onKeyLongPress事件
- Android.mk 常用宏和变量
- grails 设置一对多(hasMany belongsTo)级联关系
- Android2.3 PopupWindow在实例化时报空指针异常
- 通过JSON替换的方式实现app返回数据MOCK
- 「艾薇巴蒂卡姆昂,年中大促第一轮!」
- 如何在awr里面查看 log file sync是否是由用户commit太多造成
- mysql 命令行修改表字段名称
- 编程能力的四种境界:意识与能力
- mysql编码问题
- 欢迎界面跳转到程序主界面之倒计时,线程
- 黑马程序员 String类的学习
- FastDFS 使用经验分享