zoukankan      html  css  js  c++  java
  • jsonpath读取json数据格式公用方法!!!

    import java.util.LinkedHashMap;
    
    import com.jayway.jsonpath.JsonPath;
    import com.jayway.jsonpath.Predicate;
    
    import net.minidev.json.JSONArray;
    public class Test {
    
    	public static void main(String[] args) {
    		String jsonString = "{a:"nnnnn",b:{c:4441,d:dadwadw},e:[f:11,g:22],h:[],i:""}";
    		String JsonPath,result,name,tmp;
    		int n,m,l,p;
    
    		//jsonString = prev.getResponseDataAsString();
    		//log.info("======:"+jsonString);
    		m=4;
    
    		JsonPath= "$.data["+m+"].gItems.length()";
    		result =Test.readjson(jsonString,JsonPath);
    		log.info("======================:"+result);
    		l = Integer.parseInt(result);
    		n = 0;
    		for (int i=0;i<le;i++){
    			JsonPath= "$.data["+n1+"].gItems["+i+"]";
    			n=i+1;
    			name = "mId_1_"+n;
    			vars.put(name,mId);
    			tmp = vars.get(name);
    			log.info("======================:"+tmp);
    			
    			}
    		
    		System.out.println(resultString);
    	}
    	
    	public static String readjson(String json, String jsonPath) {
    		
    		try
    		{
    			Object value = JsonPath.read(json, jsonPath, new Predicate[0]);
    			
    			if (value instanceof Integer)
    		      {
    		        return value.toString();
    		      }else if (value instanceof String)
    		      {
    			        return value.toString();
    			  }else if (value instanceof Boolean)
    		      {
    			        return value.toString();
    			  }else if (value instanceof JSONArray)
    		      {
    				  JSONArray arr = (JSONArray)value;
    				  if(!arr.isEmpty()){return arr.toJSONString();}
    				  
    				  return "";
    			  }else if (value instanceof LinkedHashMap)
    		      {
    			        return value.toString();
    			  }else if (value instanceof float)
    		      {
    			        return value.toString();
    			  }else{
    				  return  value.toString();
    		      }
    		}
    		catch(Exception e){
    			return "pathnotfound";
    		}
    	    
    	}
    	
    }

    以上就是jsonpath读取使用方法。具体实例如下一行jmeter自动化接口代码
    source("D:\资料\Apiauto\jmeter-3.0\lib\java\Test.java");
    
    // Test.java就是上面jsonpath读取数据使用方法
    
    public static void exectFun(){
    	String rep,jsonPath,jsonPath1,result,result1,tmp;
    	//获取频道页第一屏返回包
    	 rep = prev.getResponseDataAsString();
    //	log.info("频道页第一屏返回包:"+rep);
    	//获取contents
    	 JsonPath= "$.data.hotDestinations.contents.length()";
    	 result =Test.readjson(rep,JsonPath);
    //	log.info("获取contents:"+result);
    	vars.put("contents_length",result);
    	tmp=vars.get("contents_length");
    //	log.info("获取变量:"+tmp);
    	int lo = Integer.parseInt(result);
    	//-1的目的去掉搜索更多
    	int l = lo-1;
    //	log.info("检查l为多少:"+l);
    	for(int i=0;i<l;i++){
    		// 获取每个imageUrl
    		jsonPath = "$.data.hotDestinations.contents["+i+"].title";
    //		log.info("jsonPath:"+jsonPath);
    		result =Test.readjson(rep,jsonPath);
    		vars.put("title",result);
    //		log.info("获取title:"+result);
    		jsonPath1 = "$.data.hotDestinations.contents["+i+"].appUrl";
    //		log.info("jsonPath:"+jsonPath);
    		result1 =Test.readjson(rep,jsonPath1);
    		vars.put("appUrl",result1);
            }
    }
    

      因此:大家可以根据jsonpath提供读取key的方法,来获取各个节点下的key对应的value值!!!

    尤其对与list来讲,jsonpath可以算出长度,来进行循环读取,对于不固定长度的list提供了真正意义上的脚本自动化,难道不是吗~

    jsonpath支持多种读取方式,方便快捷~利用jmeter的自身携带的断言语句

    Failure = true;
    FailureMessage = "title或appurl数据为空";

    Failure = false
    FailureMessage = "本次请求成功";  

    等完成

    举例:

    if(checkFlag(flag,tip)==true){
    Failure= false;
    FailureMessage = "在有优惠券的情况下flag满足于tip对应关系正确,flag值为"+flag+",tip值为"+tip;
    }else{
    Failure= true;
    FailureMessage = "在有优惠券的情况下flag满足于tip对应关系不正确,flag值为"+flag+",tip值为"+tip;
    }

    建议,在判断某个key为null或者""空时建议加一个try catch

    对于jmeter如何输出自动化接口脚本,可以加我或者评论 详细给予解答

    !!!!!!!!!!!!!!!!!!!!!1
    貌似话已说多~没办法~一旦涉及到自动化,我浑身充满了洪荒之力~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~·

  • 相关阅读:
    解决无法安装Microsoft .Net Framework 3.5
    day11-15,装饰器
    Xmanager Power Suit 6.0.0009 最新版注册激活
    eth
    MySql 8.0 版本使用navicat连不上解决
    day11
    Mybatis使用规则
    nginx的基本配置
    Mybatis分页插件PageHelper使用
    dubbo的使用
  • 原文地址:https://www.cnblogs.com/nzg-noway/p/6525634.html
Copyright © 2011-2022 走看看