之前在三方接口对接时,发现直接获取json内容很容易空指针,于是重新整理了一下获取JSONObject,JSONArray 的方法。
用containsKey来判断是否有此对象或者数组
dataJson.containsKey(“list”)
JSONObject dataJson = resultJson.getJSONObject("data"); //获取对象或集合
Integer total = dataJson.getInteger("total"); //获取数值
JSONArray listJsonArray = dataJson.getJSONArray("list"); //获取数组
JSONObject json2 = (JSONObject) JSONObject.toJSON(obj2); //循环jsonArray时,先用Object 接,之后将object对象转为json对象
1.观察json数据:
第一层:
1.1code和message 返回stringl类型
1.2.data {}返回集合
第二层:(解析data)
2.1total和pageNo和 pageSize为数字
2.2list[]为数组
第三层:
designatedResources []为数组且里面每个对象包含不同数量的属性 paramKey或paramValues或paramKey+paramValues
String result = "{\n" +
" \"code\":\"0\",\n" +
" \"msg\":\"success\",\n" +
" \"data\":{\n" +
" \"total\":1,\n" +
" \"pageNo\":1,\n" +
" \"pageSize\":20,\n" +
" \"list\":[\n" +
" {\n" +
" \"visitorName\":\"张三\",\n" +
" \"gender\":1,\n" +
" \"certificateType\":111,\n" +
" \"certificateNo\":\"311256196602145692\",\n" +
" \"phoneNo\":\"13576361254\",\n" +
" \"plateNo\":\"浙A12345\",\n" +
" \"picUri\":\"/pic?adsdqwe21-asafdd-12sfsdfsdf\",\n" +
" \"svrIndexCode\":\"sadsa123-asd21edsfhgsd-23rfdvsr\",\n" +
" \"visitorStatus\":8,\n" +
" \"verificationCode\":\"1234\",\n" +
" \"visiorGroupId\":\"sadsa-1sfsdfsdfsdff\",\n" +
" \"visiorGroupName\":\"分组\",\n" +
" \"receptionistId\":\"3124126241412\",\n" +
" \"receptionistName\":\"王五\",\n" +
" \"receptionistCode\":\"2423O4U2O3\",\n" +
" \"visitPurpose\":\"参观\",\n" +
" \"visitStartTime\":\"2018-07-26T15:00:00+08:00\",\n" +
" \"visitEndTime\":\"2018-07-26T19:00:00+08:00\",\n" +
" \"QRCode\":\"2015468421\",\n" +
" \"certAddr\":\"江苏南京\",\n" +
" \"certIssuer\":\"派出所\",\n" +
" \"nation\":1,\n" +
" \"birthplace\":\"江苏南京\",\n" +
" \"visitorWorkUnit\":\"海康威视\",\n" +
" \"orderId\":\"c1ou5th1p8chiicrcqcre\",\n" +
" \"visitorAddress\":\"湖南路\",\n" +
" \"personNum\":1,\n" +
" \"plannedStartTime\":\"2018-07-26T15:00:00+08:00\",\n" +
" \"plannedEndTime\":\"2018-08-26T15:00:00+08:00\",\n" +
" \"designatedResources\":[\n" +
" {\n" +
" \"paramKey\":\"1\",\n" +
" \"paramValues\":[\n" +
" \"17c09845y1c05c79059c\"\n" +
" ]\n" +
" },\n" +
" {\n" +
" \"paramKey\":\"2\"\n" +
" },\n" +
" {\n" +
" \"paramValues\":[\n" +
" \"222\",\n" +
" \"333\"\n" +
" ]\n" +
" }\n" +
" ],\n" +
" \"cardNo\":\"2143v10u396uv099\",\n" +
" \"privilegeGroupNames\":[\n" +
" \"111111111\"\n" +
" ]\n" +
" }\n" +
" ]\n" +
" }\n" +
"}";
下面为获取数据过程
List<String> aa=new ArrayList();
List<String> bb=new ArrayList();
if(result!=null&&result!="") {
JSONObject resultJson = (JSONObject) JSONObject.parse(result); //先把String 对象转成JSONObject对象
String code = resultJson.getString("code");
if ("0".equals(code)) {
JSONObject dataJson = resultJson.getJSONObject("data");
Integer total = dataJson.getInteger("total");
Integer pageNo = dataJson.getInteger("pageNo");
Integer pageSize = dataJson.getInteger("pageSize");
if(dataJson.containsKey("list")){
JSONArray listJsonArray = dataJson.getJSONArray("list");
for(Object obj:listJsonArray){
JSONObject json = (JSONObject) JSONObject.toJSON(obj);
if(json.containsKey("designatedResources")){
JSONArray designatedResourcesJsonArray = json.getJSONArray("designatedResources");
for(Object obj2:designatedResourcesJsonArray){
JSONObject json2 = (JSONObject) JSONObject.toJSON(obj2);
if(json2.containsKey("paramKey")){
aa.add(json2.getString("paramKey"));
}
if(json2.containsKey("paramValues")){
JSONArray values=json2.getJSONArray("paramValues");
System.out.println("values"+values);
for(Object obj3:values){
String b= obj3.toString();
bb.add(b);
System.out.println("b"+b);
}
}
}
}
}
}
}
}
System.out.println("aa"+aa);
System.out.println("bb"+bb);
输出结果:
总结过程:
1.第一层
JSONObject resultJson = (JSONObject) JSONObject.parse(result); //先把String 对象转成JSONObject对象
2.第二层
JSONObject dataJson = resultJson.getJSONObject(“data”);//获取集合对象
3.第三层
JSONArray listJsonArray = dataJson.getJSONArray(“list”);//获取数组对象
4.循环上一层数组,得到一个json对象,再判断此json对象中是否含有某数组
for(Object obj:listJsonArray){
JSONObject json = (JSONObject) JSONObject.toJSON(obj);
if(json.containsKey("designatedResources")){
JSONArray designatedResourcesJsonArray = json.getJSONArray("designatedResources");
}
5.循环designatedResourcesJsonArray 数组,得到json对象,判断此对象中是否有某对象或某数组
}