java json字符串转JSONObject和JSONArray 循环取值

List:

1.JSONObject和JSONArray使用

2.Json循环取值

3.总结


……1.JSONObject和JSONArray使用……


需求:

         从第三方api取回的json数据需要取其中的值进行数据分析,利用jsonobj和jsonarr可以快速定位到json值。可以使用json.cn去看着json取值,这样结构清晰。利用HttpURLConnection从第三方中拿回数据,InputStreamReader得到输出的字节流json串。


代码:

/**
	 * 调用基础信息接口 -- zhouzhou--2017年4月25日10:10:56
	 * @param sequence_id
	 * @return datajsonresult 返回这种{"result":0,"success":true,"display":"一致" )"}
	 * @throws Exception
	 */
	public String  getJsonData(String sequence_id) throws Exception  {
		String jsonData = ""; // 请求服务器返回的json字符串数据
        InputStreamReader in = null; // 读取的内容(输入流)
		//测试环境
        StringBuilder url = new StringBuilder(tongdun_data_url_test);  
        //生产环境
        //StringBuilder url = new StringBuilder(tongdun_data_url);  

        url.append("?");  
        Map params = new HashMap();
        
        params.put("partner_code", partner_code);
      //测试环境
        params.put("partner_key", partner_key_test);
      //生产环境
//       params.put("partner_key",  partner_key);
        params.put("sequence_id", sequence_id);
        for(Map.Entry entry : params.entrySet()){  
            url.append(entry.getKey()).append("=");  
            url.append(URLEncoder.encode(entry.getValue(), "utf-8"));  
            url.append("&");  
        }  
        url.deleteCharAt(url.length() - 1);  
        HttpURLConnection conn = (HttpURLConnection)new URL(url.toString()).openConnection();  
        conn.setRequestProperty("Content-type", "application/x-www-form-urlencoded");     

        in = new InputStreamReader(conn.getInputStream());
        // 为输入创建BufferedReader
        BufferedReader br = new BufferedReader(in);
        String inputLine = null;
        while (((inputLine = br.readLine()) != null)) {
            jsonData += inputLine;
        }

        String datajsonresult = JSONArray.fromObject(JSONArray
        		        .fromObject(JSONObject
        		        .fromObject(jsonData)
        				.getString("interfaces"))
        				.getJSONObject(0)
        				.getString("details"))
        				.getJSONObject(0)
        				.getString("result");
       
        // 关闭InputStreamReader
        in.close(); 
        // 断开网络连接
        conn.disconnect();
		
		return datajsonresult;
	      
	 }


……2.Json循环取值……


          需求:json中有个节点是多个值,我需要取出,去判断是否命中原有的规则。如命中,则返回命中。我的解决思路是,先将整个租赁规则放到list中,再循环取出命中规则存入一个list中,将两个list进行交集计算。就ok了。


     部分代码:

//执行调用
		String jsonString;
		 //执行调用 返回基础数据json
		try {
			jsonString=this.runEventPro(strEventId, params);
		} catch (Exception e) {
			throw new RuntimeExceptionWarn("租赁事件审核失败");
		}
		//执行成功,插入一条数据到auditresult
		 
		AuditResult auditResult=new AuditResult();
		auditResult.setAuditId(audit.getId());
		auditResult.setCenterName("租赁事件");
		auditResult.setCenterResult(jsonString);
		auditResult.setUserId(audit.getUserId());
		//插入一条数据auditresult
		//auditService.createAuditResult(auditResult);
			
		//开始进行规制判断
		String tongdunresult = "";
		//1.取出json中的hit_rules
		try {
			JSONObject.fromObject(jsonString).getString("hit_rules");
		} catch (Exception e) {
			tongdunresult="";
		}
		 
		//2.如果有hit_rule就循环取出name字段
		 List hit_rules_list = new ArrayList();

		 if (tongdunresult!="") {
			//循环取出命中内容,放到list里面
			 for(int i=0;i hit_rules_list_1=this.hit_rules_list_1();
		 List hit_rules_list_2=this.hit_rules_list_2();
		 
		 //4.判断第一个规则		
		 hit_rules_list_1.retainAll(hit_rules_list);
		 if (hit_rules_list_1.size()>0) {
			//如果有下面的就return 2审核失败,显示命中
		 System.out.println("第一个规则,当前命中了:"+hit_rules_list_1);
			 return 2;
		}

……3.总结……

      先想清楚业务,再想实现。关于json的操作,还需学习。




你可能感兴趣的:(8.CUCO)