List:
1.JSONObject和JSONArray使用
2.Json循环取值
3.总结
需求:
从第三方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;
}
需求: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;
}
先想清楚业务,再想实现。关于json的操作,还需学习。